web-dev-qa-db-ja.com

`> foo.txt`と` <foo.txt`を単独でbashとzshで使用する一般的なルールは何ですか?

cshでは無効です。 bashzshでそれらを使用する際の一般的なルールは何ですか?

1
nonopolarity

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_NULLCMDcshをエミュレートするときにデフォルトで設定されます。

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

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

< file

端末の場合はページングとともに、標準出力にファイルの内容を表示します。 NULLCMDおよびREADNULLCMDは、シェル関数を参照する場合があります。

5
muru