Bash
逐行執行標準輸出結果並提示確認
我有一個(可能)列印幾行的命令,然後我想一個接一個地執行它們(使用
xargs
例如,或其他任何東西):find . -name "*string*" -print | awk '{ print "echo " $1 " >> file.txt" }' | xargs -L 1
每個
echo ... >> file.txt
命令的執行都會給出提示Enter a value:
,使用者必須明確鍵入yes
以確認或no
取消命令的進一步執行。例如,是否可以將其通過管道傳輸到一行以始終輸入
yes
?或者暫停直到使用者輸入yes?到目前為止,我正在考慮兩種可能的解決方案:
- 使用期望腳本。
- 逐行擷取已執行命令行的標準輸出,並在這些行上循環,直到我到達提示符,然後等待使用者輸入或添加
yes
或no
自動。有沒有更簡單的方法可以做到這一點並在之後傳遞一個額外的命令
xargs
?(假設我是否總是想進入yes
?)。以上哪種解決方案會更好。我認為第二個更可取,以確保跨平台兼容性並避免外部依賴,例如expect
.
您想將名稱中包含該字元串的所有文件的路徑名添加
string
到 filefile.txt
,並確認每個文件。這就是你如何做到這一點
find
:find . -name '*string*' -ok printf '%s\n' {} \; >>file.txt
如果使用者回复(或) ,該
-ok
選項將使用插入的找到的路徑名來執行給定的實用程序。該命令將等待,直到給出答复。{}``y``yes``find
要始終回复
y
,請使用yes | find ... >>file.txt
(或更改
-ok
為-exec
)。要始終回复
n
,請使用yes n | find ... >>file.txt
請注意,您的原始命令是不安全的,因為它會按原樣創建包含文件名的程式碼。因此,特製的文件名可能被用來創建程式碼來執行一些不應該被執行的東西。