我想我在這裏推動了bash的限制,但是我真的想要完成這個工作而不必重新編寫整個腳本。bash文件逐行讀取;同時允許交互式stdin?
我有一些動態的東西是我想要對其執行操作的文件對列表。我還想在繼續執行任何任務之前提示。
它看起來像這樣:
diff -rq $dir1 $dir2 | \
sed -ne 's/^Files \(.*\) and \(.*\) differ$/\1 \2/p' | \
while read differingfilepair; do
...
printf "Continue? (Y/n)"
read -n1 cont
done
正如你可以在這裏看到的while read line
塊似乎充當某種形式的接收標準輸入的數據內容的子shell的。
的$cont
變量基本上只是吸食該數據的每一行的第一個字符(在該對中diff
報道爲不同的文件的第一文件的路徑中的第一個字符),它不連接到該終端。
有沒有辦法做我想在這裏做的事情?我想一個解決方法是使用臨時文件,但有另一種方式嗎?
編輯:使用以後加載到while read
塊像這樣的臨時文件:while read l; do ...; done < .tmp_file
仍然接管標準輸入! (雖然我認爲this answer會幫助)
是的,似乎是這個問題的文件描述符重定向方法的等式的一部分...雖然這是有點超越我。我最終利用了數據的結構性,並通過簡化列表並使內部循環跟蹤狀態。在'cat file'中使用'for file''' –