このスクリプトは何をしていますか?

このスクリプトは何をしていますか?
#!/bin/bash

echo 123456789 > out.txt
exec 3<> out.txt
read -n 4 <&3
echo -n 5 >&3
exec 3>&-

面接手書き試験中に、台本の最後に出てくるout.txtの内容について質問を受けました。実際、その後スクリプトを実行しましたが、結果が出ました123456789。しかし、スクリプト、特にexecステートメントの部分で何が起こっているのかわかりません。マニュアルページとGoogleの検索結果を調べましたが、この部分に関する情報がexec見つかりませんでした。3<>シェルスクリプトに精通している人なら、ここで何が起こっているのか説明できますか?

ベストアンサー1

echo 123456789 > out.txt123456789ファイルに文字列を書き込みます。out.txt

この構成では、読み取りと書き込みのためにexec 3<>out.txtファイルを開き、それをファイル記述子#3に追加します。out.txt<>

read -n 4 <&34文字を読みます。

echo -n 5 >&35を書き込みます(5を5に置き換えます)。

exec 3>&-ファイル記述子#3を閉じます。

~につながる

cat out.txt
123456789

execintに関する部分bash(1)指摘した:

exec [-cl] [-a name] [command [arguments]]指定した場合はcommandシェルを置き換えます。 [...]指定しないと、commandすべてのリダイレクトが現在のシェル[...]に適用されます。

おすすめ記事