首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash:在循环中创建许多描述符

bash:在循环中创建许多描述符
EN

Stack Overflow用户
提问于 2016-06-02 02:27:09
回答 1查看 623关注 0票数 0

我试图在bash中为名为1、2、3等的文件创建多个描述符。

例如,exec 9>abc/1工作得很好,但是当我试图在For循环中创建描述符时,比如:exec $[$i+8]>abc/$i,它就不能工作了。我尝试了许多不同的方法,但似乎exec只是不接受变量。有办法做我想做的事吗?

编辑:如果没有,也许有一种没有描述符的使用flock的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-03 23:08:04

是的,exec不接受文件描述符号的变量。正如注释中指出的,您可以使用

代码语言:javascript
复制
eval "exec $((i + 8))>"'"abc/$i"'

如果$i1,则相当于

代码语言:javascript
复制
exec 9>"abc/$i"

即使文件名被更改为与abc/1不同的文件名,这些复杂的引号也确保了eval ed命令和exec-ed命令是安全的。

的确有警告:

使用大于9的文件描述符的重定向应该谨慎使用,因为它们可能与shell内部使用的文件描述符发生冲突。

因此,如果任务不需要连续的文件描述符号,则可以使用自动分配的描述符:

可以在每个重定向前面加上一个文件描述符号,取而代之的是表单{varname}的一个字。在这种情况下,除了>&-<&-之外,对于每个重定向操作符,shell将分配一个大于10的文件描述符,并将其分配给varname

所以,

代码语言:javascript
复制
exec {fd}>"abc/$i"
echo "$fd"

将打开用于写入abc/1的文件描述符10 (或更高),并打印该文件描述符号(例如10)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37581661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档