我是bash脚本新手,想写一个简短的脚本,检查某个程序是否正在运行。如果它运行,脚本应该将窗口带到前台,如果它不运行,脚本应该启动它。

#!/bin/bash

if [ "$(wmctrl -l | grep Wunderlist)" = ""]; then
    /opt/google/chrome/google-chrome --profile-directory=Default --app-id=ojcflmmmcfpacggndoaaflkmcoblhnbh
else
    wmctrl -a Wunderlist
fi

我的比较是错误的,但我甚至不知道我应该谷歌找到一个解决方案。我的想法是,如果窗口不存在,"$(wmctrl -l | grep Wunderlist)"将返回一个空字符串。运行脚本时出现此错误:
~/bin » sh handle_wunderlist.sh
handle_wunderlist.sh: 3: [: =: argument expected

最佳答案

替换:

if [ "$(wmctrl -l | grep Wunderlist)" = ""]; then

使用:
if ! wmctrl -l | grep -q Wunderlist; then

grep将其退出条件设置为true(0),如果不是,则找到匹配和false(1)。因为您想与之相反,我们在命令开始时放置!反转退出代码。
通常,grep会将匹配的文本发送到standard out。我们不想要那条短信,我们只想知道有没有匹配的。因此,我们添加了-q选项以使grep安静。
例子
为了说明grep -q语句中if的用法:
$ if ! echo Wunderlist | grep -q Wunderlist; then echo Not found; else echo Found; fi
Found
$ if ! echo Wunderabcd | grep -q Wunderlist; then echo Not found; else echo Found; fi
Not found

关于bash - Bash:如何检查命令的返回值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38556968/

10-16 20:42