リダイレクトのエラーの謎
Thu Aug 17 21:09:01 JST 2023 (modified: Fri Aug 18 12:28:43 JST 2023)
views: 3980, keywords:シェル芸, 自作シェル, bash この記事は最終更新日が2年以上前のものです。
連載のためにリダイレクトについてBashの重箱の隅を突っついて遊んでいるんですが、なかなか意味不明です。Bashのコードを読めという話ではあるんですが、個人的に奇妙だと思ったエラーについてメモしておきます。
もし理屈が分かったら、記事に謝辞を掲載するので情報ください!
>&の前には1をつけてよい?
>&は通常、>&2みたいにファイル記述子を書いて使いますが、 &>の非推奨の書き方も兼ねています。 この非推奨の書き方の場合、>& fileのようにファイル名を書くことできます。 ただ、下の例を見ると1>& fileという書き方も許されているようです。 2>& fileはダメみたいです。
$ echo aaaa 2>&f #ダメ
bash: f: 曖昧なリダイレクトです
$ echo aaaa 1>&f #これはOK
$ cat f
aaaaファイル記述子に大きな数字を渡した場合
2>&ファイル記述子としたときに、ファイル記述子の桁が多いと変なことが起こります。
$ echo 2>&1
#OK
$ echo 2>&10
bash: 10: 不正なファイル記述子です #10が悪い
$ echo 2>&10000
bash: 10000: 不正なファイル記述子です #10000が悪い
$ echo 2>&100000000000
bash: 2: 不正なファイル記述子です #なぜか2が悪いことになる
$ echo >&100000000000
bash: 100000000000: 不正なファイル記述子です #これは100000000000が悪いことになるとりあえず以上です。また何か変な挙動があったら報告します。
いただいた情報
あとから実験していただきました。Misskeyのリンクを掲載しておきます。雑誌には謝辞書きます。
ノート
Tweet