2011-11-28 17 views
15

Böyle bir dosya tanıtıcı belirtmek için bir bash değişkeni kullanmak istiyorum:Bash'ta bir dosya tanıtıcısını belirtmek için değişken nasıl kullanılır?

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

Ama kullanımı yanlıştır:

-bash: exec: 6: not found 

Yani, bir değişken nasıl kullanılacağı bir dosya tanıtıcı belirtmek için exec komutunda?

+0

Eğer '$ {id}' vE/vEYA 'eval ....' çalıştın? İyi şanslar. – shellter

+2

@shellter: Sonraki karakter bir kelime karakteri değil, bu yüzden küme parantezleri yardımcı olmaz. 'eval' tek seçenek gibi görünüyor. –

+0

Sorunuzu, bash sürümüyle güncellemenize yardımcı olabilirsiniz. İyi şanslar. – shellter

cevap

10

eval kullanmanız ve tüm ifadeyi tırnak içine almanız gerekiyor.

eval "exec $id<>$file" 

Ve bunu her zaman $id kullanmak istediğiniz yapın.

+0

Cevabınız için teşekkürler. Gerçekten işe yaradı. –

11
kabul yanıt doğru

ama as of bash 4.1, otomatik dosya tanıtıcı tahsisini kullanabilir ve bu durumda size eval gerekmez:

:

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

bu gibi kullanabilirsiniz

echo test >&${id} 

ya:

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

Kodda "id" nin bulunması gerekiyormuş gibi görünüyor. Bir değişken "id" yapmak mümkün mü? Bu daha fazla esneklik sağlayacaktır. '(For FD = 3; FD <100; FD ++)) gibi bir kod kullandığımı düşünün; exec {FD}> dosya. $ FD; echo $ FD> &${FD}; tamamlandı. Exec {FD}> dosyası. $ {FD} ', $ FD'nin tüm değerleri üzerinde aynı tanımlayıcı olurdu, bu doğru olmaz. –

+1

'id' bir değişkendir, 'echo $ id' ile görebilirsiniz. –

+0

Tüm dosya tanımlayıcılarını 3 ve 100 arasında tek tek dosyalara yönlendirmeye çalışıyorsanız, şöyle yaparsınız: 'fd için {3..100}; eval "exec $ fd <> file. $ fd"; echo $ fd> &$fd; done' –