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

标签 linux bash exec file-descriptor flock

我正在尝试在 bash 中为名为 1、2、3 等的文件创建多个描述符。
例如,exec 9>abc/1 工作正常,但是当我尝试在 for 循环中创建描述符时,如下所示:exec $[$i+8]>abc/$我,它不起作用。我尝试了很多不同的方法,但似乎 exec 就是不接受变量。有什么办法可以做我想做的事吗?

编辑:如果没有,也许有一种方法可以在没有描述符的情况下使用 flock

最佳答案

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

eval "exec $((i + 8))>"'"abc/$i"'

如果 $i1 , 相当于

exec 9>"abc/$i"

即使文件名更改为与 abc/1 不同的名称,那些复杂的引号确保 eval-ed 然后 exec-ed 命令是安全的.

但是 there is警告:

Redirections using file descriptors greater than 9 should be used with care, as they may conflict with file descriptors the shell uses internally.

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

Each redirection that may be preceded by a file descriptor number may instead be preceded by a word of the form {varname}. In this case, for each redirection operator except >&- and <&-, the shell will allocate a file descriptor greater than 10 and assign it to varname.

所以,

exec {fd}>"abc/$i"
echo "$fd"

将打开文件描述符 10(或更大)以写入 abc/1并打印该文件描述符编号(例如 10 )。

关于linux - bash:在循环中创建许多描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37581661/

相关文章:

linux - 我可以在 VULTR 上以 root 身份通过 SSH 连接到 LEMP centos,但我终生无法使用 sftp

linux - Bash IF 通过虽然它不应该

Bash 参数扩展 ${parameter/pattern/string} 带引号

linux - 在 Shell 脚本中打印前一天和后一天的文件路径

ruby exec 使用我的 ~/.bashrc 中的函数

linux - 需要一个解决方案来同步从 iPerf 和 GPS 接收的数据

python - 我如何使用ansible在ubuntu上安装python 2.7.3

linux - 在 Linux 上模拟延迟和丢弃的数据包

c - execvp : bad address error

java - 在 Java 中在用户的 PATH 上执行程序