2016-04-20 6 views
1

は、私はzshの5.1.1(簡略化した例)で、次の問題の上に今日つまずい:Zsh:空リストのzargsの振る舞い - これはバグか機能ですか?

#!/bin/zsh 
autoload -U zargs 
zargs -- my*files(N) -- rm -v 

は、これはうまくいきました、1日まで、私のパターンに一致するファイルはありませんでした。 (N)のなので、コマンドが入力プログラムが空の場合はxargsは、コマンドを呼び出すことはありません同様の無駄で、まったく呼び出されないであろう。この場合rm

zargs -- -- rm -v 

私は予想していた、それに変わりました。しかし、rmは、引数なしで一度呼び出されたであり、エラーメッセージが書き込まれたという効果がありました。

確かに、我々は

zargs -- -- echo xxx 

も一度echo呼び出すことがわかります。

マニュアルページのzargsのドキュメントはこの点では明確ではありませんが、引数がなければコマンドを呼び出すべきではないと思います。

バグがありますか?zargsは本当にこのように動作するはずですか?

答えて

1

zargsは、GNU xargsと同じようにこのように動作します(ugh ...)。

-r, --no-run-if-emptyオプションを使用できます。 zargs継承zargs --helpからGNU xargsからこのプロパティ:

-r, --no-run-if-empty  if there are no arguments, then do not run COMMAND; 
          if this option is not given, COMMAND will be 
          run at least once 

GNU xargsこの機能があります

-r、--no-実行-場合、空の標準があれば
入力に空白が含まれていない場合は、 コマンドを実行しないでください。通常、コマンドが入力されなくても一度実行されます。 このオプションはGNU拡張です。 GNUのxargsのと

-r
互換性: -
xargs.1 nroff source

(?UN)は幸いにも、FreeBSDとNetBSD'sは、このようなカウンタ機能を持っています。 xargsのGNUバージョンは、xargs入力が空であっても、少なくとも1回は ユーティリティー引数を実行し、 はこの動作を抑止する-rオプションをサポートしています。 FreeBSDの xargsは空の 入力でユーティリティ引数を実行しませんが、GNU xargsとのコマンドライン互換性 の-rオプションをサポートしますが、-rオプションはxargsのFreeBSD バージョンでは何も行いません。
-FreeBSD xargs(1)

関連する問題