Bash: 如何检查命令的 return 值
Bash: How can I check the return value of a command
我是 bash 脚本编写的新手,想编写一个简短的脚本来检查某个程序是否 运行ning。如果是 运行s,脚本应该将 window 带到前台,如果不是 运行,脚本应该启动它。
#!/bin/bash
if [ "$(wmctrl -l | grep Wunderlist)" = ""]; then
/opt/google/chrome/google-chrome --profile-directory=Default --app-id=ojcflmmmcfpacggndoaaflkmcoblhnbh
else
wmctrl -a Wunderlist
fi
我的比较是错误的,但我什至不确定我应该 google 找到解决方案。我的想法是,如果 window 不存在,"$(wmctrl -l | grep Wunderlist)"
将 return 一个空字符串。当我 运行 脚本时出现此错误:
~/bin » sh handle_wunderlist.sh
handle_wunderlist.sh: 3: [: =: argument expected
您需要 space 在 [
(test
) 命令的结束参数 ]
之前:
if [ "$(wmctrl -l | grep Wunderlist)" = "" ]; then
....
else
....
fi
附带说明一下,您将 shebang 用作 bash
,但 运行 使用 sh
的脚本(根据错误消息推测为 dash
)。
替换:
if [ "$(wmctrl -l | grep Wunderlist)" = ""]; then
有:
if ! wmctrl -l | grep -q Wunderlist; then
grep
将其退出条件设置为 true (0
) 表示找到匹配项,否则设置为 false (1
)。因为您想要相反的结果,所以我们将 !
放在命令的开头以反转退出代码。
通常情况下,grep 会将匹配的文本发送到标准输出。我们不想要那个文本,我们只想知道是否有匹配项。因此,我们添加了 -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 脚本编写的新手,想编写一个简短的脚本来检查某个程序是否 运行ning。如果是 运行s,脚本应该将 window 带到前台,如果不是 运行,脚本应该启动它。
#!/bin/bash
if [ "$(wmctrl -l | grep Wunderlist)" = ""]; then
/opt/google/chrome/google-chrome --profile-directory=Default --app-id=ojcflmmmcfpacggndoaaflkmcoblhnbh
else
wmctrl -a Wunderlist
fi
我的比较是错误的,但我什至不确定我应该 google 找到解决方案。我的想法是,如果 window 不存在,"$(wmctrl -l | grep Wunderlist)"
将 return 一个空字符串。当我 运行 脚本时出现此错误:
~/bin » sh handle_wunderlist.sh
handle_wunderlist.sh: 3: [: =: argument expected
您需要 space 在 [
(test
) 命令的结束参数 ]
之前:
if [ "$(wmctrl -l | grep Wunderlist)" = "" ]; then
....
else
....
fi
附带说明一下,您将 shebang 用作 bash
,但 运行 使用 sh
的脚本(根据错误消息推测为 dash
)。
替换:
if [ "$(wmctrl -l | grep Wunderlist)" = ""]; then
有:
if ! wmctrl -l | grep -q Wunderlist; then
grep
将其退出条件设置为 true (0
) 表示找到匹配项,否则设置为 false (1
)。因为您想要相反的结果,所以我们将 !
放在命令的开头以反转退出代码。
通常情况下,grep 会将匹配的文本发送到标准输出。我们不想要那个文本,我们只想知道是否有匹配项。因此,我们添加了 -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