2011-04-23 63 views
2

我有一個值列表(當前在一個文件中大約80),我需要在Bourne Shell腳本中處理,然後使用每個值來執行另一個shell腳本。如何從文件和進程中避免長時間讀取參數列表?

如果我使用結構

read parameter 

do 

    some processing 
    call other shell script using parameter 

done < data_file.lst 

那麼無論代碼是在做完成循環執行不具有與之相關聯的終端。這意味着調用哪個測試tty來執行某些tput處理的shell腳本將不起作用。

我不想使用for parameter in `cat data_file.lst`方法,該方法保留stdin和stdout連接到tty,因爲存在這樣的危險:隨着值列表的增長,最大行長度將最終被超過。

因此,任何人都可以建議一種方法來處理參數列表而不使用讀取做的事情嗎?

或者是否必須使用xargs來調用中間shell腳本來完成處理,然後調用次要shell腳本?

回答

1
# Make copy of stdin. 
exec 3<&0 

while read parameter; do 
    some processing 

    # In sub-shell restore original stdin, then execute command. 
    (exec 0<&3; command that needs tty) 
done < data_file.lst 
+0

謝謝!問題解決了。我會將其添加到我的提示和技巧列表中。 – Corin 2011-04-23 23:03:19

1

使用您讀不同的文件句柄:

while read parameter <&3 
do 
    some processing 
    call other shell script using parameter 
done 3< data_file.lst 
+0

謝謝!這是我沒有考慮過的方法。 – Corin 2011-04-23 23:04:16

相關問題