這個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