我想用一個bash變量來表示一個文件描述符,這樣的:如何使用變量在bash中指示文件描述符?
id=6
file=a
exec $id<>$file
但用法是錯誤的:
-bash: exec: 6: not found
那麼,如何用一個變量來表示文件描述符在執行命令?
我想用一個bash變量來表示一個文件描述符,這樣的:如何使用變量在bash中指示文件描述符?
id=6
file=a
exec $id<>$file
但用法是錯誤的:
-bash: exec: 6: not found
那麼,如何用一個變量來表示文件描述符在執行命令?
您必須使用eval
並將整個表達式放在引號中。
eval "exec $id<>$file"
並且每次使用時都要使用$id
。
感謝您的回答。它真的有效。 –
接受的答案是正確的,但as of bash 4.1,你可以使用自動文件描述符分配,並且在這種情況下,你不需要eval
:
file=a
exec {id}<>"$file"
然後你可以使用它像這樣:
echo test >&${id}
或:
fsck -v -f -C ${id} /dev/something
似乎「代碼」必須在代碼中修復。有可能使「id」變成一個變量?這將允許更多的靈活性。想象一下,我正在使用像for((FD = 3; FD <100; FD ++));執行exec {FD}> file。$ FD; echo $ FD> &${FD}; done'。這是行不通的,因爲'exec {FD}>文件。$ {FD}'將是$ FD的所有值的相同描述符,對吧? –
'id'是一個變量,你可以用'echo $ id'來看它。 –
如果您試圖將3到100之間的所有文件描述符重定向到單個文件,那麼您應該這樣做:'在{3..100}中爲fd;做eval「exec $ fd <>文件。$ fd」; echo $ fd> &$fd; done' –
你嘗試'$ {ID}'AND/OR'EVAL ....'?祝你好運。 – shellter
@shellter:下一個字符不是單詞字符,所以大括號不會幫助。 'eval'看起來是唯一的選擇。 –
它可能有助於更新您的問題與您使用的bash版本。祝你好運。 – shellter