这个bash脚本应该做到以下几点:从文件击:保存Python代码的结果bash脚本,并写入结果到文件
1)读入两个值,susc
和exp_trans
postprocessing.txt
2)将这两个值作为命令行输入传递给Python程序postproc.py
3)将postproc.py
的结果保存为varval
。这是三个值的列表。
4)创建一个文件头文件M1, M2, M3
,并在其下写下varval
值。
一路上有一些cd
,但我没有得到我期望的。这是我想到:
M1 M2 M3
[[4.0], [2.2799999999999998], [0.56000000000000005]]
[[5.3], [2.1111111111111111], [0.59111111111111111]]
这里就是我得到:
[[4.0], [2.2799999999999998], [0.56000000000000005]]
M1,M2,M3
[[4.0], [2.2799999999999998], [0.56000000000000005]]
./postproc.sh: line 6: [[4.0], [2.2799999999999998], [0.56000000000000005]]+1: syntax error: operand expected (error token is "[[4.0], [2.2799999999999998], [0.56000000000000005]]+1"
那么清楚什么是错用,我怎么迭代,因为我只能从postproc.py
,而不是两个得到一个结果。我认为错误在于此行:varval=$(python ../postproc.py --susc $a1 --exp_trans $b1 2>&1)
有谁知道如何将结果保存在bash中的循环中,然后将它们写入文件?
我的bash代码:
#/bin/bash
i=0
while read a1 b1
do
i=$(($i+1))
cd RUN_EXP$i
varval=$(python ../postproc.py --susc $a1 --exp_trans $b1 2>&1)
echo $varval
cd ..
echo M1,M2,M3
for i in "${varval[@]}"
do
echo $i
done
done < postprocessing.txt
编辑
这不只是i
被覆盖(虽好抓,谢谢!)。根据Veselin Ivanov和下面鼠脑的答案确定后,产出仍然不太正确。
至今代码:
#/bin/bash
i=0
echo M1,M2,M3
while read a1 b1
do
i=$(($i+1))
cd RUN_EXP$i
varval=$(python ../postproc.py --susc $a1 --exp_trans $b1 2>&1)
echo $varval
cd ..
for j in "${varval[@]}"
do
echo $j
done
done < postprocessing.txt
输出:
M1,M2,M3
[[4.0], [2.2799999999999998], [0.56000000000000005]]
[[4.0], [2.2799999999999998], [0.56000000000000005]]
[[5.3], [2.1111111111111111], [0.59111111111111111]]
[[5.3], [2.1111111111111111], [0.59111111111111111]]
'for i in“$ {varval [@]}”'真的吗? –
你为什么要用../运行你的python脚本?你可不可以放一个#!在你的Python脚本中将它指向Python可执行文件? –
@ IgnacioVazquez-Abrams真的真的......有另一种方式吗? – StatsSorceress