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
工作正常。
在进一步挖掘系统后,添加以下注释:
- /bin/csh 是 /bin/tcsh 的软链接(我删除了 csh 标签)
- 将 shebang 行更改为 /bin/tcsh -f 并没有改变任何东西(显然但想声明)
- 文件已创建但内容为空
在某些版本的 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 或更早版本。)
我们目前有一个脚本,用于检查后台是否有东西 运行。它通过 运行 以下内容(已更新以包含我 运行 在我们的服务器上的完整测试脚本示例)执行此操作:
#!/bin/csh -f
sleep 30 &
set testFile = /tmp/checkFile$$
jobs -l > $testFile
它在屏幕上打印进程 运行 但检查文件中什么也没有出现,因此导致服务器认为其他部分未能启动)。完全不知道为什么这不起作用。其他命令似乎工作正常。
我是 运行 rhel 6.8 并且 运行 作为非 root 用户执行命令。 . 运行 其他命令,例如 ps > /tmp/testFile
工作正常。
在进一步挖掘系统后,添加以下注释:
- /bin/csh 是 /bin/tcsh 的软链接(我删除了 csh 标签)
- 将 shebang 行更改为 /bin/tcsh -f 并没有改变任何东西(显然但想声明)
- 文件已创建但内容为空
在某些版本的 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 或更早版本。)