我们目前有一个脚本,用于检查事物是否在后台运行。它通过运行以下命令(更新为包括我在服务器上运行的完整测试脚本示例)来执行此操作:
#!/bin/csh -f
sleep 30 &
set testFile = /tmp/checkFile$$
jobs -l > $testFile
它会在屏幕上显示正在运行的进程,但检查文件中没有任何内容,从而导致服务器认为其他部分无法启动)。完全失去了为什么这不起作用。其他命令似乎工作正常。
我正在运行rhel 6.8并以非root用户身份运行该命令。 。运行ps > /tmp/testFile
等其他命令可以顺利运行。
在进一步挖掘系统后,添加了以下注释:
答案 0 :(得分:2)
在某些版本的tcsh中,jobs -l
命令将其输出打印到stderr。在其他人,它打印到stdout。 (我说打印到stdout是正确的行为。)
解决方法是更改
jobs -l > $testFile # redirect stdout
到
jobs -l >& $testFile # redirect both stdout and stderr
这适用于任何版本的tcsh,无论是否有错误。
请注意,OP系统上的tcsh是csh的符号链接,因此这可能是一个特定的tcsh问题。
在https://github.com/tcsh-org/tcsh处有tcsh来源的镜像。日志显示2016-05-24所做的更改,“不要将作业打印到stderr(paulo.cesar.pereira.de.andrade)”。查看提交历史记录,似乎{t}版本6.19.01和6.20中的jobs
输出打印到stdout,6.19.00及更早版本中打印到stderr。显然,OP最新的RHEL 6.8系统上的一些软件包已经更新。
我在tcsh 6.14.00和6.18.01中看到jobs -l
写入stdout。这可能是回归。 (我无法从源代码构建tcsh 6.19或更早版本。)