gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:05 26 4
gpt4 key购买 nike

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

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

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

我正在运行 rhel 6.8 并以非根用户身份运行命令。 .运行其他命令(例如 ps >/tmp/testFile)没有问题。

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

  • /bin/csh 是/bin/tcsh 的软链接(soft link)(我删除了 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 是指向 csh 的符号链接(symbolic link),因此这可能是一个 tcsh 问题。

https://github.com/tcsh-org/tcsh 有一个 tcsh 源的镜像.日志显示 2016-05-24 所做的更改,“不要将作业打印到 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 或更早版本。)

关于linux - jobs -l 命令无法使用 csh 写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46414671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com