リダイレクトのエラーの謎

Thu Aug 17 21:09:01 JST 2023 (modified: Fri Aug 18 12:28:43 JST 2023)
views: 2159, keywords:シェル芸, 自作シェル, bash

 連載のためにリダイレクトについて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のリンクを掲載しておきます。雑誌には謝辞書きます。

ノート   このエントリーをはてなブックマークに追加 
 

prev:日記(2023年8月15日) next:ビルトインコマンドをリダイレクトしてもフォークしない(そんなこと知らなかったよ・・・)

やり散らかし一覧

記事いろいろ