exec命令中的管道不起作用

用户名

我在脚本中有命令:

exec su -s /bin/sh -c 'exec "$0" "$@"  | ts "[%Y-%m-%d %H:%M:%S]"' user -- test.python $FULLPATH   &> log & 

FULLPATH测试Python文件的路径在哪里通过此命令,我希望脚本的输出将带有ts命令中的时间戳记写入日志文件

实际上并没有发生,除了没有时间戳之外,输出的输出没有任何时间戳:

exec su -s /bin/sh -c 'exec "$0" "$@"' user -- test.python $FULLPATH  | ts "[%Y-%m-%d %H:%M:%S]" &> log & 

这也与前面的命令给出了相同的结果。

感谢您对为什么会发生这种情况的任何想法以及可能的解决方案。

斯蒂芬·查泽拉斯

使用execwith&没有什么意义(尽管这不会成为问题的根源),但这将不会节省任何额外的费用。对于管道组件,我只能看到它与zsh外壳一起保存了一个分叉,但是仅当应用于最后一个管道组件(cmd1 | exec cmd2,这意味着zsh不再等待其他管道组件)时才可以看到

在这里,您没有将python脚本stderr重定向到ts,尽管您将其发送到log文件。您可能想要:

su -s /bin/sh -c '
  "$0" "$@" 2>&1 |
    ts "[%Y-%m-%d %H:%M:%S]"
  ' user -- test.python "$FULLPATH" > log 2>&1 & 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章