所以这是一个非常奇怪的错误。我已经在两个 GNU/Linux 安装上测试了它,即 Arch Linux 和 Linux Mint 17.1。我有一个正在处理的 bash 脚本,它以 if 语句开头。
if which apt-get &> /dev/null; then x="foo"
elif which yum &> /dev/null; then x="bar"
elif which pacman &> /dev/null; then x="baz"
它在我的 Arch 安装(使用 bash v4.3.33)上运行良好,但在我的 Mint 安装(bash v4.3.11)上,它顺利完成了 if 语句,但在 if 语句之后有一个提示用户input 和 bash 立即从 stdout 打印(尽管我很确定我将它重定向到/dev/null)。看起来像:
Choose an option: /usr/bin/apt-get
其中“选择一个选项:”是我的提示。这不会发生在 Arch 上,当我将顺序切换为
if which pacman &> /dev/null; then x="foo"
elif which apt-get &> /dev/null; then x="bar"
我的提示停止出现后的尾随输出。
我在这里遗漏了什么吗?
最佳答案
好的伙计们,我知道发生了什么;这只是我的一个愚蠢错误,但我真的很感谢 dg99 和格伦 jack 曼的帮助。
我注意到,如果在图形文件管理器 (Nemo) 中执行,并选择“在终端中运行”,则不会出现奇怪的输出。这促使通过终端进行一些测试,我发现如果我使用 ./script
而不是 sh script
执行脚本,问题会自行解决。我真的不知道为什么会这样,但它非常干净地解决了这个问题。
关于linux - 第一个 "if-then"语句不会在 Mint 上将标准输出重定向到/dev/null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28461250/