execの `exec FD> `フォーマット情報

execの `exec FD> `フォーマット情報

zsh次の操作(例えば)が正確に説明されているマニュアルページには何も見つかりません。

exec 3> /tmp/foo

私が見つけることができるすべての正しい文書は、exec「簡単なコマンド」が続く形式を参照しています。exec(例えば参照man zshbuiltinsman zshmisc.) (このexec FD>フォームはman zshmiscしかし、私の考えでは、その形式が他の場所で完全かつ正確に記録されていると仮定する詩です。 )

人気作品をみました

man zshall | grep -P '\bexec\b'

...しかし、私が探しているものは何もありません。

不足している文書を置き換えるための良い文書を知っている人はいますか?


PS:私がビューに「文書の欠如」として見えることの1つの可能な説明は、このようなフォームがexec 3> /tmp/foo実際にはフォームの「特別な場合」であるということです。exec 簡単なコマンドもしそうなら、(1)たとえば、単純なコマンドが何であるかを説明するドキュメントを探したいと思います3> /tmp/foo(コマンドラインでこの「簡単なコマンド」を実行するとクリックするまで停止します^C)。2)スクリプトのコードはそのようなものですexec 3> /tmp/foo評価された後に発生しますが、たとえばexec dateそうでないのはなぜですか?

答え1

exec命令されたものと命令されていないものの意味は関係ありません。ある意味はコマンドに合わず、他の意味はコマンドなしでは意味がないため、組み込み名がオーバーロードされたようです。これにより、コマンドで機能しない新しい名前を作成する必要がなくなります。別の名前。

これ手動状態:

もし注文するリダイレクトを省略しましたが、指定すると、リダイレクトは現在のシェルに適用されます。

これは、これがexec 3> /tmp/foo実行中のシェルプロセスでファイル記述子3が指すものを変更することを意味します。同様のシェルコードの断片は、/bin/somecommand 3>/tmp/foo次のことを意味します。

  1. 子プロセスを作成します。
  2. /tmp/foo書き込みのために子プロセスのファイル記述子3を開きます。
  3. /bin/somecommand子プロセスでファイルを実行します。

exec 3>/tmp/fooステップ3のみを実行すると、プロセスは何もしません。

その後、exec 3>/tmp/fooシェルとそのサブプロセスでファイル記述子3へのすべての後続のアクセスは、他のリダイレクト/tmp/fooと同じように進みます。たとえば、ファイル記述子 3 に何も接続されていない端末で次のスクリプトを実行するとします。

echo hello           # prints to the terminal
echo nope >&3        # complains about a bad descriptor since no file is open on fd 3
exec >/tmp/out 3>/tmp/three
echo hello           # writes to /tmp/out
echo howdy >&3       # writes to /tmp/three
echo wibble >&3      # writes a second line to /tmp/three

関連情報