標準出力結果を1行ずつ実行し、確認メッセージを表示します。

標準出力結果を1行ずつ実行し、確認メッセージを表示します。

(おそらく)いくつかの行を印刷してから1行ずつ実行したいコマンドがあります(xargs使用またはその他など)。

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

各コマンドは、コマンドの追加実行を確認またはキャンセルするためにユーザーが明示的に入力する必要があるプロンプトでecho ... >> file.txt実行されます。Enter a value:yesno

yesたとえば、これを常に入力するようにラインにパイプすることは可能ですか?または、ユーザーが「はい」と入力するまで一時停止しますか?

これまで、2つの可能な解決策を検討しています。

  1. 予想されるスクリプトを使用してください。
  2. 実行されたコマンドラインの標準出力を1行ずつキャプチャし、プロンプトに達するまで行を繰り返してから、ユーザー入力または自動追加または追加を待ちyesますno

これを行い、後で追加のコマンドをパイプするより簡単な方法はありますかxargs? (おそらく私はいつも入りたいですかyes?)上記の解決策のどれが良いですか?クロスプラットフォームの互換性を確保し、expect

答え1

string名前にその文字列を含むすべてのファイルのパス名をファイルに追加し、各ファイル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

元のコマンドが生成するコードにはファイル名がそのまま含まれているため、安全ではありません。したがって、特別に細工されたファイル名を使用してはいけないことを行うコードを生成できます。

関連情報