【问题标题】:Unix File Descriptor Not Found未找到 Unix 文件描述符
【发布时间】:2014-06-02 23:02:35
【问题描述】:

我在使用文件描述符时遇到了一些麻烦。最终目标是能够使用flock for,因为我正在使用这个脚本来更新一个文件,它可以并行运行多次,我不想要任何冲突。该脚本从另一个脚本调用并传递变量

调用脚本:“call.sh”

#!/bin/ksh

scriptDir=/home/Scripts

###other stuff happens####


#Call to replacement script

. $scriptDir/replacement.sh var1 var2

替换脚本:“replacement.sh”

#!/bin/ksh

var1=$1
var2=$2
file=/myfile.doc
exec 300>>$file

flock -x 300

##Replacement logic###

当我在常规或调试 (ksh) 中运行 call.sh 时出现错误:

./call.sh: /replacement.sh[34]: 300: not found

起初我虽然可能文件描述符也需要在第一个脚本中,所以我补充说:

exec 300>>$file 

到 call.sh,但返回的错误如下:

./call.sh[28]: 300 : not found

如果有人可以向我解释我缺少什么,那就太棒了!

提前致谢!

【问题讨论】:

    标签: file shell ksh file-descriptor


    【解决方案1】:
    1. file= /myfile.doc 中的 = 后面有一个无效空格
    2. ksh 仅在字面上使用时支持单个数字 fds。使用9 而不是300
    3. ksh 使非标准 fds 不可继承。专门将其重定向到命令。

    总之:

     #!/bin/ksh
     file=./myfile.doc
     exec 9>>$file
     flock -x 9  9>&9
    

    【讨论】:

    • 当我检查我的代码时,空格是一个错字,正如你更正的那样。我将 fd 更改为 9 并重新运行脚本,它按计划工作,但是在flock -x 9 9>&9 之后出现错误flock: 9: Bad file descriptor
    • 我想提一下,不确定这是否重要,但我的代码中的“exec 9>>”变成了全黄色。 "9>&9" 也是黄色的。
    • 它对我有用。您使用哪个 ksh 版本?
    • PD KSH v5.2.14 99/07/13.2
    • 这是您遇到的唯一错误吗?如果你exec 8> "$file"; flock -x 8 9>&8
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多