未找到Unix文件描述符

时间:2014-06-02 23:02:36

标签: file shell ksh file-descriptor

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

调用脚本:“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###

当我运行call.sh regular或debug(ksh)时,我收到一个错误:

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

起初我可能也需要文件描述符在第一个脚本中,所以我添加了:

exec 300>>$file 

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

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

如果有人能向我解释我错过了什么,那就太棒了!

提前致谢!

1 个答案:

答案 0 :(得分:1)

  1. =
  2. file= /myfile.doc后的空格无效
  3. ksh在字面上使用时仅支持单位数字fds。使用9代替300
  4. ksh使非标准fds不可继承。特别是将其重定向到命令。
  5. 总之:

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