我用 python 和 C 创建了几段代码,这些代码必须运行多次,每次运行都使用一组新的输入值。为此,我创建了一个 Unix shell 脚本,它应该针对不同输入的数量运行各种程序:
#!/bin/sh
_file="${1:-/dev/null}"
while IFS=' ' read -r f1 f2 f3 f4
do
cd folder1
cd folder2
echo "$f1 $f2 $f3 $f4 " > inputs.txt
mpiexec -n 4 a_C_code
cd ..
cd ..
python3 python_code_1.py
python python_code_2.py
python python_code_3.py
python python_code_4.py
echo "$f1" #So I know how many times the loops has been performed
done < "$_file"
正在读入脚本的文件具有以下形式:
1 2 3 4
5 6 7 8
...
但是,当我执行该程序时,它仅循环遍历第一组输入(在本例中为 1 2 3 4)并完成,而不运行其他各种输入组的程序。
答案1
shell 代码看起来不错,简化的文本版本可以按预期工作:
seq 12 | paste - - - - |
while IFS=' ' read -r f1 f2 f3 f4 ; do
echo "$f1 $f2 $f3 $f4 "
done
输出:
1 2 3 4
5 6 7 8
9 10 11 12
所以钢铁起子的评论可能是正确的,并且该程序mpiexec
或其中一个python
程序正在消耗剩余的输入行,因此echo
永远不会到达第二行输入。
作为一个例子,考虑上面的代码,添加了一组饥饿的命令:
seq 12 | paste - - - - |
while IFS=' ' read -r f1 f2 f3 f4 ; do
echo "$f1 $f2 $f3 $f4 "
(read x; read x; read x;)
done
输出(注意缺少的行):
1 2 3 4