私が持っていると仮定すると、そのフラグによって生成された質問に、または自動的に答えるにはls | xargs -n1 -p rm
どうすればよいですか?yes
yes n
-p
私は試しましたが、yes n | (ls | xargs -n1 -p rm)
成功しませんでした。
修正する:質問は実際には質問ではなく、正しく使用する方法に関する質問rm
です。yes
私は私が使用するエイリアスや関数を持っていて、xargs -p
それを実行する前に私に何をしているのか尋ねて表示するのが好きです。私はそれが何をするのかを知るとき、関数のすべてをyes
自動的に繰り返すことができるようにしたいです。xargs -p
したがって、例ではこれを使用していますが、rm
実際には内容ではありません。
また、もう少し明確に言えば、使用するエイリアスや関数を変更したくないので、-p
単に外部からyesと入力したほうがよいでしょう。
正直に言えばyes | some_function_asking_me_questions
何かsome_function_asking_me_questions <( yes )
効果があると思ったのですがそうではありませんでした。
2番目の編集:別の例:リージョンのAWS SNSトピックをリストするエイリアスがあります。例:
alias delete_snstopics="list_sns | cut -f 2 | xargs -n1 -p aws sns delete-topic --topic-arn "
その後、AWS の各リージョンについて、これらの SNS トピックを見つけて削除するように求める機能があります。 SNSトピックのIDが毎回異なるため、xargsが実行されるのを見たいです。aws sns delete-topic --topic-arn $1
問題が発生した場合は、WebコンソールでSNS IDを一致させることができます。また、特定のゾーンのSNSトピックを削除したくない場合もあります。そのため、yes
部分的な削除と完全な削除に同じ機能を使用しながら、まだ便利な出力を得ることができるように、この機能を使用したいと思います。話しますか?
答え1
コマンドを分析してみましょう。
yes n | (ls | xargs -n1 -p rm)
パイプは標準入力をls | xargs -n1 -p rm
読み込みますls
が、標準出力をxargs
標準入力にリダイレクトし、標準出力は変更されません。
次に、出力をyes
このパイプにパイプします。そのパイプの標準入力が入っているので、ls
読み取らずにxargs
何も表示されません。
今明らかな質問は次のとおりです。xargs
コマンドを実行するかどうかをどうやって尋ねることができますか?最終的に、標準入力(プログラムが通常ユーザー対話を読む場所)は、ls
!の出力を読み取るようにリダイレクトされます。
まあ、答えはxargs
ターミナルファイルを直接開いてこれらの問題のリダイレクトメカニズムをバイパスすることです/dev/tty
。したがって、入力がファイルリダイレクトの影響を受けないことを確認してください。
に入力するには、xargs
プログラムによって制御される端末デバイスを介してプロセスをレンダリングできるプログラムが必要です。非常に強力ですが、非常に複雑なプログラムは、残念expect
ながらあなたが望むことを達成するより簡単な方法を知りません。
答え2
あなたはそれを使用することができます:
ls | xargs -n1 rm -r
これはディレクトリまたはファイルに適用されます。