Linux Shell脚本:pacmd:未找到命令
我试图编写一个简单的shell脚本来检测clementine是否正在运行。如果是,它将关闭节能功能。我在终端中尝试了pacmd命令,它工作得很好,但在脚本中没有。在第一个错误“pacmd no command found”后,我输入了完整路径,然后它说“/noSleep.sh:第5行:[/usr/bin/pacmd:没有这样的文件或目录”。所以我不明白它为什么找不到它。有什么帮助吗 我不想在clementine不播放音乐时关闭节能功能,所以我不想使用ps x | grep clementineLinux Shell脚本:pacmd:未找到命令,linux,bash,shell,Linux,Bash,Shell,我试图编写一个简单的shell脚本来检测clementine是否正在运行。如果是,它将关闭节能功能。我在终端中尝试了pacmd命令,它工作得很好,但在脚本中没有。在第一个错误“pacmd no command found”后,我输入了完整路径,然后它说“/noSleep.sh:第5行:[/usr/bin/pacmd:没有这样的文件或目录”。所以我不明白它为什么找不到它。有什么帮助吗 我不想在clementine不播放音乐时关闭节能功能,所以我不想使用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 not playing和playing。字符串Clementine在播放时显示,在不播放时不显示,因此我不确定它为什么不起作用。除了语法错误(如前所述,
[
周围需要空格),将/usr/bin/pacmd list sink输入的结果管道化到grep-Clementine
会导致grep
在子shell中执行。这会使正在测试的返回复杂化。子shell中的命令成功完成,即使结果可能未找到。这就是的位置e字符串
,它阻止在子shell中运行grep
,可以保留您想要的返回:
#!/bin/bash
while true
do
if [ grep -q Clementine <<<"$(/usr/bin/pacmd list-sink-inputs)" ]
then
xset -dpms; xset s off
else
xset +dpms; xset s on
fi
sleep 2m
done
!/bin/bash
虽然是真的
做
如果[grep-q Clementine始终在if语句中的[
之后和]
之前使用空格,正如cyrus在评论中提到的,那么您也不会在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
您是否尝试过执行ps | grep Clementine
?在[
之后和]
之前插入一个空格。首先看一看,它没有运行。但是我在语句中添加了倾斜引号,它成功了。但是,它返回了false(on)不管怎样。嗯,这很奇怪。$()中的backticks和enclosure之间没有区别
。我处于劣势的一个问题是我没有pacmd
。我假设它简单地将列表返回到stdout
,但是,如果它将列表返回到stderr
,您将需要重定向输出。@DavidC.Rankin:是的。不知道pacmd
的行为会让这有点棘手。问题不是这不是很有帮助。但是为什么在if
中有方括号呢?你不是只想从grep
返回代码吗?@DavidC.Rankin:另外,我倾向于使用进程替换而不是here字符串。例如if grep-q Clementine