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

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

これらは では無効です。およびcshでこれらを使用する一般的な規則は何ですか?bashzsh

答え1

bash では、コマンドなしのリダイレクトはリダイレクトを実行して閉じるだけです。

  • < foo.txt単独でコマンドラインとして使用すると、ファイルがfoo.txt読み取り用に開かれ、その後閉じられます。
  • > foo.txtファイルをfoo.txt書き込み用に開き、必要に応じて作成して切り捨ててから閉じます。ファイルを空にする簡単な方法です。

zsh では、コマンドを実行しないリダイレクトはNULLCMDまたは になりますREADNULLCMD

  • READNULLCMD(またはNULLCMD、`READNULLCMD が設定されていない場合) stdin のリダイレクトの場合:

    % echo foo > foo.txt
    % READNULLCMD=nl
    % < foo.txt
         1  foo
    
  • NULLCMDstdout のリダイレクトの場合:

    % 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_NULLCMD エミュレート時にデフォルトで設定されますシェル

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

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

< file

ファイルの内容を標準出力に表示します。端末の場合はページングも行います。NULLCMDまた、READNULLCMDシェル関数を参照することもできます。

関連情報