逐行执行标准输出结果并有提示确认

逐行执行标准输出结果并有提示确认

我有一个命令(可能)打印几行,然后我想一行一行地执行它们(xargs例如使用或其他任何东西):

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

每个echo ... >> file.txt命令的执行都会给出提示Enter a value:,用户必须明确键入yes以进行确认或no取消进一步执行该命令。

yes例如,是否可以将其通过管道传输到一行中以始终输入?或者暂停直到用户输入“是”?

到目前为止我正在考虑两种可能的解决方案:

  1. 使用期望脚本。
  2. 逐行捕获执行的命令行的标准输出,并循环这些行,直到到达提示符,然后等待用户输入或自动添加yes或添加no

有没有更简单的方法来做到这一点并在之后管道一个额外的命令xargs? (假设我是否总是想进入yes?)。上述哪种解决方案会更好。我认为第二个更适合确保跨平台兼容性并避免像expect.

答案1

您想要将名称包含该字符串的所有文件的路径名添加string到 file 中file.txt,并对每个文件进行确认。

这就是你如何做到这一点find

find . -name '*string*' -ok printf '%s\n' {} \; >>file.txt

如果用户回复(或) ,该-ok选项将执行给定的实用程序,并插入找到的路径名。该命令将等待,直到给出答复。{}yyesfind

总是回复y、使用

yes | find ... >>file.txt

(或更改-ok-exec)。

要始终回复n,请使用

yes n | find ... >>file.txt

请注意,您的原始命令是不安全的,因为它创建的代码按原样包含文件名。因此,特制的文件名可能被用来创建代码来执行不应该执行的内容。

相关内容