#!/bin/bash
echo 123456789 > out.txt
exec 3<> out.txt
read -n 4 <&3
echo -n 5 >&3
exec 3>&-
スクリプトの最後に、インタビューの筆記試験でout.txtの内容を尋ねられました。スクリプトの後書きを実行したところ、123456789
が得られました。しかし、スクリプトで何が行われているのか、特にexecステートメントのある部分はわかりません。 exec
のマンページとGoogle検索結果を調べたところ、3<>
ビットで何も見つかりませんでした。シェルスクリプトに精通している誰かが、ここで何が起こっているのか説明できますか?
_echo 123456789 > out.txt
_は、文字列_123456789
_を_out.txt
_ファイルに書き込みます。
_exec 3<>out.txt
_構文は、_out.txt
_を読み取って_<
_を書き込むためにファイル_>
_を開き、ファイル記述子#3にアタッチします。
_read -n 4 <&3
_は4文字を読み取ります。
_echo -n 5 >&3
_は5を書き込みます(5を5に置き換える)。
_exec 3>&-
_はファイル記述子#3を閉じます。
その結果
_cat out.txt
123456789
_
exec
intに関するセクション bash(1)
は次のように述べています。
_
exec [-cl] [-a name] [command [arguments]]
_command
を指定すると、シェルが置き換えられます。 [...]command
が指定されていない場合、リダイレクトは現在のシェルで有効になります[...]。