csh
では無効です。 bash
とzsh
でそれらを使用する際の一般的なルールは何ですか?
Bashでは、コマンドなしのリダイレクトはリダイレクトを実行してからそれらを閉じるだけです。
< foo.txt
を単独で使用すると、ファイルfoo.txt
を読み取り用に開いてから閉じます。> foo.txt
は、ファイルfoo.txt
を書き込み用に開き、必要に応じて作成し、切り捨ててから閉じます。ファイルを空にする簡単な方法。Zshでは、コマンドなしのリダイレクトはNULLCMD
またはREADNULLCMD
を実行します。
stdinのリダイレクトではREADNULLCMD
( `READNULLCMDが設定されていない場合はNULLCMD
):
% echo foo > foo.txt
% READNULLCMD=nl
% < foo.txt
1 foo
NULLCMD
stdoutのリダイレクト:
% NULLCMD='ls'
% > foo.txt # runs $NULLCMD
% < foo.txt # runs $READNULLCMD, showing the output of `NULLCMD` run previously
1 Applications
2 Desktop
3 Documents
4 Downloads
詳細は Zsh 7.3、コマンドを使用しないリダイレクト を参照してください。
単純なコマンドが1つ以上のリダイレクト演算子と0個以上のパラメーター割り当てで構成されているが、コマンド名がない場合、zshはいくつかの方法で動作できます。
パラメータ
NULLCMD
が設定されていないか、オプションCSH_NULLCMD
が設定されている場合、エラーが発生します。これはcshの動作で、CSH_NULLCMD
はcshをエミュレートするときにデフォルトで設定されます。オプション
SH_NULLCMD
が設定されている場合、組み込みの:
が、指定されたリダイレクトを使用してコマンドとして挿入されます。これは、shまたはkshをエミュレートするときのデフォルトです。それ以外の場合、パラメータ
NULLCMD
が設定されていると、その値は指定されたリダイレクトでコマンドとして使用されます。NULLCMD
とREADNULLCMD
の両方が設定されている場合、リダイレクトが入力の場合、前者の値の代わりに後者の値が使用されます。NULLCMD
のデフォルトは「cat
」で、READNULLCMD
のデフォルトは「more
」です。したがって< file
端末の場合はページングとともに、標準出力にファイルの内容を表示します。
NULLCMD
およびREADNULLCMD
は、シェル関数を参照する場合があります。