我想用一个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