2011-11-28 17 views
15

私はこのように、ファイル記述子を示すために、bashの変数を使用したい:変数を使用してbashのファイル記述子を示す方法は?

id=6 
file=a 
exec $id<>$file 

しかし、使い方が間違っている:だから

-bash: exec: 6: not found 

、ファイル記述子を示すために、変数を使用する方法execコマンドで?

+0

あなたは '$ {ID}' AND/OR 'evalのを....'てみたのですか?がんばろう。 – shellter

+2

@shellter:次の文字は単語文字ではないので、中括弧は役に立ちません。 'eval'は唯一のオプションのようです。 –

+0

あなたの質問は、使用しているbashのバージョンで更新してください。がんばろう。 – shellter

答えて

10

evalを使用して、式全体を引用符で囲む必要があります。

eval "exec $id<>$file" 

そして、あなたが$idを使用するたびにこれを行います。

+0

あなたの答えをありがとう。それは本当に働いた。 –

11

受け入れ答えが正しいですが、as of bash 4.1、あなたは自動的にファイルディスクリプタの割り当てを使用することができ、その場合にはあなたがevalを必要としない:

file=a 
exec {id}<>"$file" 

その後、あなたはこのようにそれを使用することができます:

echo test >&${id} 

か:

fsck -v -f -C ${id} /dev/something 
+0

"id"はコード内で修正する必要があるようです。 "id"を変数にすることは可能ですか?これにより、より多くの柔軟性が可能になります。私が 'for((FD = 3; FD <100; FD ++))のようなコードを使っているとしましょう。 exec {FD}>ファイルを実行します$ FD;エコー$ FD> &${FD}; done'。 'exec {FD}> file。$ {FD}'は$ FDのすべての値に対して同じ記述子になるので、これはうまくいきません。 –

+1

'id'は変数で、' echo $ id'で見ることができます。 –

+0

3と100の間のすべてのファイル記述子を個々のファイルにリダイレクトしようとすると、 'fud in {3..100};のようになります。 eval "exec $ fd <>ファイルを実行します。$ fd";エコー$ fd> &$fd; done' –

関連する問題