10

unixy 環境でファイルを切り詰めるには、一般的に次のように使用します。

$ > file

bash (ダッシュも) では、ファイルが切り捨てられ (存在しない場合は作成され)、プロンプトが返されます。zsh では、ファイルが切り詰められて作成されますが、ハングします。Ctrl-Cプロンプトを再度使用できるようにする必要があります。

空でない出力のリダイレクトは問題なく機能します。

zsh$ cat nonempty.file > file
zsh$

質問は:

この動作は予期されたものですか? zsh は間違っていますか?

4

1 に答える 1

15

私は実際にはzshユーザーではありませんが、zshはbash> fileと同じようです。cat > file新しいファイルを作成したり、zsh で切り詰めたりするには、: > file. これはbashでも機能します。


アップデート:

zshマニュアルでこれを見つけました:

コマンドなしのリダイレクト:

単純なコマンドが1 つ以上のリダイレクト演算子と 0 個以上のパラメーター割り当てで構成され、コマンド名がない場合 zsh、いくつかの方法で動作する可能性があります。

パラメータNULLCMDが設定されていない場合、またはオプションCSH_NULLCMDが設定されている場合は、エラーが発生します。これは csh 動作でありCSH_NULLCMD、エミュレート時にデフォルトで設定されますcsh

オプションSH_NULLCMDが設定されている場合、ビルトイン:は指定されたリダイレクトでコマンドとして挿入されます。shまたはをエミュレートするときのデフォルトですksh

それ以外の場合、パラメーターNULLCMDが設定されている場合、その値は指定されたリダイレクトでコマンドとして使用されます。NULLCMDと の両方 READNULLCMDが設定されている場合、リダイレクトが入力の場合、前者の値の代わりに後者の値が使用されます。 およびのデフォルトNULLCMDcatREADNULLCMDですmore

私のシステムでは、デフォルトは次のとおりです。

$ echo $ZSH_VERSION
4.3.10
$ echo $NULLCMD
cat
$ echo $READNULLCMD
/usr/bin/pager
$
于 2013-03-21T11:59:49.150 に答える