我正在尝试编写一个简单的shell脚本来检测clementine是否正在运行。如果是,它将关闭省电。我在终端中尝试了pacmd命令并且它运行良好,但在脚本中它并没有。在第一个错误表示" pacmd没有找到命令"我放入了完整的路径然后它说" ./ noSleep.sh:第5行:[/ usr / bin / pacmd:没有这样的文件或目录"。所以我迷失了为什么它找不到它。有什么帮助吗?
当克莱门汀不播放音乐时,我不想关闭省电功能。所以我不想使用ps x | grep Clementine。
#!/bin/bash
while true
do
if [/usr/bin/pacmd list-sink-inputs | grep Clementine]
then
xset -dpms; xset s off
else
xset +dpms; xset s on
fi
sleep 2m
done
脚本已更新:
#!/bin/bash
while true
do
if [ `echo pacmd list-sink-inputs | grep "Clementine" | wc -l` ]
then
xset -dpms; xset s off
echo off
else
xset +dpms; xset s on
echo on
fi
sleep 30s
done
由于某种原因,它每次都返回true。在测试pacmd语句时,我测试了Clementine没有玩和玩。字符串Clementine在播放时显示,并且在不播放时不显示,所以我不确定它为什么不能工作。
答案 0 :(得分:1)
在cyrus的评论中,总是在if [
之前和if ]
之前的空格中使用空格,你也没有在if语句中测试任何内容
grep -c "Clementine"
命令检查命令"Clementine"
的输出中出现/usr/bin/pacmd list-sink-inputs
的次数,如果它大于0
它可能是while true
do
if [ "$(/usr/bin/pacmd list-sink-inputs|grep -c "Clementine")" -gt 0 ]
then
xset -dpms; xset s off
else
xset +dpms; xset s on
fi
sleep 2m
done
开。
{{1}}
答案 1 :(得分:0)
除了语法错误(指出[
周围所需的空格)之外,将/usr/bin/pacmd list-sink-inputs
的结果用于grep Clementine
会导致grep
在子外壳即可。这使您正在测试的回报复杂化。子shell中的命令成功完成,即使结果可以是not found
。这是阻止在子shell中运行here string
的{{1}}可以保留您想要的回报的地方:
grep