首先" if-then"声明不会在stint上将stdout重定向到/ dev / null

时间:2015-02-11 18:03:57

标签: linux bash if-statement stdout mint

所以这是一个非常奇怪的错误。我已经在两次安装的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语句之后出现了#sa; sa提示用户输入和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"

我的提示停止出现后的尾随输出。

我在这里找不到什么东西?

1 个答案:

答案 0 :(得分:1)

好吧,伙计们,我知道发生了什么事;这对我来说只是一个愚蠢的错误,但我非常感谢dg99和glenn jackman的帮助。

我注意到如果在图形文件管理器(Nemo)中执行,并选择了"在终端中运行,"奇怪的输出并没有发生。这促使通过终端进行了一些测试,我发现如果我使用./script而不是sh script执行脚本,问题就会自行解决。我不知道为什么会这样,但它很清楚地解决了这个问题。