'exec{fd} とはどういう意味ですか?

'exec{fd} とはどういう意味ですか?

これは{fd}プレースホルダーではなく、文字通りの意味です。私はこれを行い、何も参照しないスクリプトがあり、他の場所では{fd}も参照しません。これは有効なbashですか?

exec {fd}</dev/watchdog

答え1

ファイル記述子を選択して使用可能にしたいのではなく、

exec 4< /dev/watchdog  # Was 4 in use? Who knows?

この表記法は、シェルに現在使用されていないファイル記述子を選択し、その記述子を読み取るためにファイルを開き、指定された変数(fd)に番号を割り当てるように要求します。

$ exec {fd}< /dev/watchdog
$ echo $fd
10

答え2

シート:

{var}<filename

シェルがファイルを読み取るために開き、filenameファイル記述子番号を変数に保存しますvar。とリダイレクト演算子の間にスペースを入れることはできません。{var}ファイル記述子番号は同じでなければなりません10

この機能はもともとksh2006年のksh93rバージョンで提供され、2010年bashからbash-4.1-alphaコピーされました。 2007年よりzsh早く変更された事項もあります。bashzsh 4.3.4

答え3

これについては Bash のマニュアルセクションで説明します。リダイレクト

各リダイレクトの前にファイルディスクリプタ番号を付けることができますが、{形式の単語が先頭になることもあります。変数名}。この場合>&-を除くすべてのリダイレクト演算子に対して、<&-シェルは10より大きいファイル記述子を割り当て、{変数名}。 { の場合>&-または<&-前に来る場合変数名}、の価値変数名閉じるファイル記述子を定義します。

関連情報