>"在 Ubuntu 16.04.2 和 Fedora 24 中的行为不同-6ren"> >"在 Ubuntu 16.04.2 和 Fedora 24 中的行为不同-考虑以下 sh 命令: sh -c 'sleep 3 &>> /dev/null' &>>> 应该重定向 stdout 和 stderr。但是,它在 Fedora 24 和 Ubuntu 16.04.-6ren">
gpt4 book ai didi

linux - sh 中的 "&>>"在 Ubuntu 16.04.2 和 Fedora 24 中的行为不同

转载 作者:太空宇宙 更新时间:2023-11-04 09:17:39 27 4
gpt4 key购买 nike

考虑以下 sh 命令:

sh -c 'sleep 3 &>> /dev/null'

&>>> 应该重定向 stdoutstderr。但是,它在 Fedora 24 和 Ubuntu 16.04.2 中的解释不同。

在 Fedora 24 中,它正是以这种方式工作,上面的命令一直等到 sleep 结束。

在Ubuntu 16.04.2中,命令运行方式为sleep 3 & >>/dev/null,即发送sleep到后台,命令立即退出.

差异会导致奇怪的问题并且不容易找到,因为我在 R 脚本中调用了诸如 foo arg1 arg2 output_file &>> test.log 之类的东西,并期望命令以 output_file< 结尾 被写入。在 Fedora 24 中,它按预期工作,但令我惊讶的是 Ubuntu 16.04.2 中的行为发生了变化。

我不确定这是否是记录在案的行为。

最佳答案

最后一个链接解释了如何为 dash(Ubuntu 中的 sh)修复它:

sh -c 'sleep 3 > /dev/null 2>&1'

这也适用于 Bash。请注意单个 > - 您不需要将追加运算符 (>>) 与/dev/null 一起使用。

提示:看到这一点,您可能很想编写与 sh 的两种实现都兼容的所有脚本,但这只会让您的生活变得不必要地困难。使用最强大的 shell,您可以期望它在您感兴趣的所有平台上默认可用。在您的情况下,这将是 bash(版本 4),这也是许多其他发行版的默认设置。

关于linux - sh 中的 "&>>"在 Ubuntu 16.04.2 和 Fedora 24 中的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45320065/

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