11

を使用xargsすると、私がまったく期待していなかったことが起こりましたが、それはある程度理にかなっていると思います。これは私がやったことではありませんが、これは何が起こったのかを示すべき例です。

fn.sh

#!/usr/bin/bash
index=1
for arg in "$@"; do echo "Arg #$index = '$arg'"; let ++index; done
read -p "type something followed by enter: "  a
echo "You typed '$a'."

コマンドは次のとおりです。

echo boo hoo | xargs ./fn.sh

今私が欲しいのは、ユーザーの操作を許可するためにfn.shから読み取ることができることですが、それは によって奪われました。一時ファイルから読み取ることができると思いますが、名前のないファイルを使用できるかどうか疑問に思っていました。stdinxargsxargs

4

2 に答える 2

11

私は cygwin を使用したことがありませんが、通常は次のようにします。

xargs -a <(echo boo hoo) ./fn.sh

-aファイルから読み取るようにxargsに指示し、<( )構文(cygwinで機能する場合と機能しない場合があります)はプロセス置換であり、読み取り可能な名前付きオブジェクト(名前付きパイプまたは で始まるパス/dev/fd)を効果的に作成し、次の結果を生成します同封のコマンドを実行します。

コマンドの途中にデータ ソースを配置する必要があるため、これはパイプ構文ほど便利ではありませんが、xargsそれ以外は同等です。

于 2013-11-13T19:56:13.633 に答える
7

同じ問題を解決しようとしているこの質問を見つけたので、xargs マンページを詳しく調べました。

この-oオプションは、必要なものを正確かつ予測どおりに達成する必要があります。

-o: コマンドを実行する前に、子プロセスで stdin を /dev/tty として再度開いてください。これは、xargs で対話型アプリケーションを実行する場合に便利です。

私の検索の最初の結果だったので、この古い質問への回答を更新したかっただけです。

于 2017-12-17T20:21:47.190 に答える