zsh
次の操作(例えば)が正確に説明されているマニュアルページには何も見つかりません。
exec 3> /tmp/foo
私が見つけることができるすべての正しい文書は、exec
「簡単なコマンド」が続く形式を参照しています。exec
(例えば参照man zshbuiltins
とman 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
次のことを意味します。
- 子プロセスを作成します。
/tmp/foo
書き込みのために子プロセスのファイル記述子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