これ:
set -x
rm -f p; mkfifo p
exec 99<>p
Bashでは成功しますが、"99 not found"
ダッシュ( )では失敗します。
ダッシュで機能させるにはどうすればよいですか?
答え1
Bourne Shellとそれ以降のksh88から派生したPOSIX規格では、これは機能しないと明示的に言及しています。その理由はシェル構文によるものです。
<>file
読み書きのためのオープン標準入力と:
[n]<>file
n
読み書きするためにファイル記述子を開きます。
n
この場合は数値です。
POSIXで指定された範囲外の2桁の99を使用しました。したがって、パーサーはこれをリダイレクト演算子に関連付けられた数値として扱うのではなく、別の引数として扱います。したがって、このパラメータは実行されるファイルと見なされますexec
。
移植可能なスクリプトを好む場合は、POSIX 標準に従ってください。完全に移植可能なスクリプトを作成するには、スクリプトをBourne Shellと100%互換性があるようにします。
あなたの場合は99を使用する理由がないようですので、9を使用することをお勧めします。