从命令行读取有效,在通过 nohup 运行的脚本中失败

从命令行读取有效,在通过 nohup 运行的脚本中失败
read -t 600 -p 'Please specify the format in which you wish to export the file. csv/gz by entering (1/2)?' file_format 

上面的命令从命令行运行,但是当从通过它启动的 shell 脚本运行相同的命令时,nohup ./script_name with_paramas > out_file它会失败并出现以下错误:

copy_to_gds.sh: line 26: read: read error: 0: Bad file descriptor

答案1

这可以通过以下方式重现:

$ nohup bash -c 'read var' | cat
nohup: ignoring input and redirecting stderr to stdout
bash: line 0: read: read error: 0: Bad file descriptor

这就是联机帮助页所说的内容nohup(强调我的):

如果标准输入是终端,则将其从无法读取的文件

nohup/dev/null通过打开来做到这一点只写模式,然后通过将其复制到 fd 0 中来重定向标准输入。因此出现EBADF( "Bad file descriptor") 错误 - 因为您的脚本尝试从以只写模式打开的文件中:

$ read var 0>/dev/null
bash: read: read error: 0: Bad file descriptor

尝试read从运行 via 的脚本获取用户输入没有什么意义nohup,所以我想您必须重新考虑您的方法。

相关内容