gpt4 book ai didi

linux - 为什么重定向输出会影响 bash 中的测试结果?

转载 作者:太空狗 更新时间:2023-10-29 12:05:57 25 4
gpt4 key购买 nike

我正在尝试编写脚本以在它们自己的 x session 中启动 xfce 和 xbmc。

为此,我设置了 DISPLAY 值,在后台运行第一个并等待我从 xset q 成功返回。然后我更改 DISPLAY 并对另一个执行相同的操作。

我正在一段一段地写这篇文章,以检查我的语法是否适合每个部分,而我坚持的部分是“等待直到我从 xset q 成功返回” >.

export DISPLAY=":0.0"
while [[ ! `xset q` ]]
do
echo -n "."
done

这段代码似乎有效,所以当 XFCE 正在运行时它会立即退出,而当它不运行时它会坐在那里打印 .xset: unable to open display ":0.0"

但是我不想看到 xset 的输出,所以我试图重定向它的输出。

export DISPLAY=":0.0"
while [[ ! `xset q > /dev/null 2>&1` ]]
do
echo -n "."
done

然而,添加此重定向似乎会破坏检测,并且无论 XFCE 是否正在运行,它都只是坐在那里打印点。

我已经单独测试了这两个命令,并在它们自己的 shell 脚本中进行了测试,它们都按我预期的方式工作,当 XFCE 未运行时返回 1,当 XFCE 运行时返回 0。

任何人都可以解释为什么将该命令放在 [[ ! `...` ]] 破坏了 while 测试以及如何正确重写此 while 循环?

(在 Arch 上运行)

最佳答案

问题是您根本没有测试 xset 的返回码,而是在处理它的输出。当您将输出重定向到 /dev/null 时,反引号中的表达式不会返回任何内容,就好像您有:

while [[ ! '' ]] ...

它将始终运行 while 主体。

你应该做的是:

while ! xset q > /dev/null 2>&1 
do
...
done

关于linux - 为什么重定向输出会影响 bash 中的测试结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12651750/

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