Bash

逐行執行標準輸出結果並提示確認

  • October 30, 2019

我有一個(可能)列印幾行的命令,然後我想一個接一個地執行它們(使用xargs例如,或其他任何東西):

find . -name "*string*" -print | awk '{ print "echo " $1 " >> file.txt" }' | xargs -L 1

每個echo ... >> file.txt命令的執行都會給出提示Enter a value:,使用者必須明確鍵入yes以確認或no取消命令的進一步執行。

例如,是否可以將其通過管道傳輸到一行以始終輸入yes?或者暫停直到使用者輸入yes?

到目前為止,我正在考慮兩種可能的解決方案:

  1. 使用期望腳本。
  2. 逐行擷取已執行命令行的標準輸出,並在這些行上循環,直到我到達提示符,然後等待使用者輸入或添加yesno自動。

有沒有更簡單的方法可以做到這一點並在之後傳遞一個額外的命令xargs?(假設我是否總是想進入yes?)。以上哪種解決方案會更好。我認為第二個更可取,以確保跨平台兼容性並避免外部依賴,例如expect.

您想將名稱中包含該字元串的所有文件的路徑名添加string到 file file.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

請注意,您的原始命令是不安全的,因為它會按原樣創建包含文件名的程式碼。因此,特製的文件名可能被用來創建程式碼來執行一些不應該被執行的東西。

引用自:https://unix.stackexchange.com/questions/549431