2014-07-11 82 views
0

這可能是一個簡單的問題,但我對bash腳本很陌生,並且在這方面花了相當多的時間,沒有運氣;我希望我能在這裏得到答案。使用bash腳本將單個文件從文件傳遞到python腳本

我想寫一個bash腳本,讀取文本文件中的各行,並將它們作爲python腳本的參數傳遞。我有一個文件列表(我保存在一個單獨的文本文件中,全部在單獨的行中),我需要在我的python腳本中用作參數,並且我想使用bash腳本將它們全部發送出去。當然,我可以採取繁瑣的方式,將其餘的python命令複製/粘貼到腳本中的各行中,但我認爲有一種方法可以通過「讀取行」命令來執行此操作。我已經試過各種命令的組合,但這裏是最近的一次,我有:

#!/bin/bash 
# Command Output Test 

cat infile.txt << EOF 
while read line 
do 
    VALUE = $line 
    python fits_edit_head.py $line $line NEW_PARA 5 
    echo VALUE+"huh" 
done 

EOF 

當我這樣做,我得到的返回是從輸入文件中的各條線。我有額外的價值,看看它是否會打印,但它不。很明顯,我不明白的「讀取線」命令很簡單,但在弄了很長時間之後,我不知道它是什麼。我承認我仍然是這個bash腳本遊戲的新手,並不是那麼好。任何幫助肯定會被讚賞。

回答

0

你大概的意思是:

while read line; do 
    VALUE=$line ## No spaces allowed 
    python fits_edit_head.py "$line" "$line" NEW_PARA 5 ## Quote properly to isolate arguments well 
    echo "$VALUE+huh" ## You don't expand without $ 
done < infile.txt 

的Python也可以讀取STDIN,以便它可以不慎從infile.txt讀取輸入,所以你可以使用另一個文件描述符:

while read -u 4 line; do 
    ... 
done 4< infile.txt 

更重要的是,如果你是使用Bash 4.0,使用更安全,更清潔readarray

readarray -t lines < infile.txt 
for line in "${lines[@]}; do 
    ... 
done 
+0

第一個版本放在你身上就像魅力一樣工作;我也嘗試了最後一個,並且遇到了一些問題,但是在瞭解了更多關於數組的知識之後,我可以自己去解決這個問題。出於好奇,你認爲更多的東西給我帶來了些什麼:VALUE和$ line之間的空格還是第一行缺少分號?還是它是一個聯合問題? – user3827679

+0

真正的問題是,你做了'cat infile.txt << EOF'並將命令放在這裏的文檔塊中。 'VALUE = $ line'只是一個語法錯誤問題。 – konsolebox

+0

另外,在刪除打印每行的值的部分之後,仍然會在處理每個文件之前打印每個文件的名稱。不是一個大問題,但我仍然想知道如何阻止它做到這一點。這是否與「while read line」命令有關?有沒有辦法將每行數據輸入到腳本中,而不將它們打印到屏幕上? – user3827679