jobs -l 命令无法使用 csh 写入文件

jobs -l command fails to write to file using csh

我们目前有一个脚本,用于检查后台是否有东西 运行。它通过 运行 以下内容(已更新以包含我 运行 在我们的服务器上的完整测试脚本示例)执行此操作:

#!/bin/csh -f
sleep 30 &
set testFile = /tmp/checkFile$$
jobs -l > $testFile

它在屏幕上打印进程 运行 但检查文件中什么也没有出现,因此导致服务器认为其他部分未能启动)。完全不知道为什么这不起作用。其他命令似乎工作正常。

我是 运行 rhel 6.8 并且 运行 作为非 root 用户执行命令。 . 运行 其他命令,例如 ps > /tmp/testFile 工作正常。

在进一步挖掘系统后,添加以下注释:

在某些版本的 tcsh 中,jobs -l 命令将其输出打印到 stderr。在其他情况下,它打印到标准输出。 (我会说打印到标准输出是正确的行为。)

解决方法是改变

jobs -l > $testFile # redirect stdout

jobs -l >& $testFile # redirect both stdout and stderr

这对任何版本的 tcsh 都应该可以正常工作,无论是否有错误。

请注意,OP 系统上的 tcsh 是 link 到 csh 的符号,因此这可能是一个 tcsh 问题。

https://github.com/tcsh-org/tcsh 有一个 tcsh 源的镜像。日志显示 2016-05-24 "don't print jobs to stderr (paulo.cesar.pereira.de.andrade)" 所做的更改。查看提交历史,似乎 jobs 输出在 tcsh 版本 6.19.01 和 6.20 中打印到 stdout,在版本 6.19.00 和更早版本中打印到 stderr。显然 OP 较新的 RHEL 6.8 系统上的一些软件包已经更新。

我看到 jobs -l 在 tcsh 6.14.00 和 6.18.01 中写入标准输出。这可能是一种倒退。 (我无法从源代码构建 tcsh 6.19 或更早版本。)