Shell脚本:pacmd:找不到命令

时间:2014-11-15 05:07:46

标签: linux bash shell

我正在尝试编写一个简单的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在播放时显示,并且在不播放时不显示,所以我不确定它为什么不能工作。

2 个答案:

答案 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