結合されたコマンドを引数として渡す

結合されたコマンドを引数として渡す

スクリプトを検討してくださいpass_command

ls | "$@"

名前付きコマンドを引数として受け入れます。

pass_command sort
#prints files sorted

すべての実用的な目的にはこれで十分です。ところで気になります。複合コマンドを渡すメカニズムはありますか?それはまるで

pass_command (sort | uniq) #Forgive the silly example.

編集:より複雑な例では、この質問が発生しました。

until who | grep mary
do
  sleep 60
until

Mary にログインするようにシグナルを送信します。私は特定の出来事を示すためにこれを要約したいと思います。直感的なアイデアは次のとおりです。

#watchfor
until "$@"
do
  sleep 60
done

それから電話してください。

watchfor (who | grep mary)

これが私の考えです。パラメータに名前を付けると、上記の方法が正しく機能します。これは私にこれについて考えさせました。

私は信号コマンドを隠す最も慣用的な方法を理解しようとしているようです。

答え1

evalスクリプトで単純なコマンド以上を使用する必要があります$@(スクリプトのパラメータは引用符付きの文字列として渡す必要があります)。

ls | eval "$@"

しかし、言い換えれば、これも関連しています

pass_command sort | uniq

つまり、コマンドを渡して出力に使用しますsortuniq

Unixのパイプライン化機能はほとんどの実際のアプリケーションを扱うように見えるため、そのようなスクリプトや関数は実際には使用されません。

関連情報