2017-05-13 8 views
8

がどのecho -sa列エーテルに、私は次の文で始まる言う:私は、プロセスを除外プロセスが存在しない場合、プロセスにパイプするか?

$ echo "foo" | cat -e - 1>/dev/null 

私は、次のパイプラインを提出

$ echo "foo" 1>/dev/null 

$ echo "foo" | 1>/dev/null 

なぜこれがエラーメッセージを返さないのですか? bashとpipingのドキュメントは、原因が直接的に言及されていないようです。 echoからの最初の読み取りの前にEOFが送信されていますか(またはプロセスの上流でパイプの上流で実行されていますか)?

答えて

8

シェルの単純コマンドにコマンド名を付ける必要はありません。コマンド名のないコマンドの場合:

  • 変数の割り当ては、現在の実行環境に適用されます。

    arg1=$1 arg3=$3 
    
  • リダイレクトがサブシェルで生じるが、サブシェルは、リダイレクトを初期化する以外に何もしません。以下は、引数の値に2つの変数を設定します。 (あなたが適切な権限を持っている場合)以下は切り捨てまたは示されたファイルを作成します。

    >/file/to/empty 
    

しかし、コマンドは少なくとも一つの単語を持っている必要があります。完全に空のコマンドは構文エラーです(そのため、時には :を使用する必要があります)。

回答の要約:Posix XCU§2.9.1

関連する問題