使用管道和撇号时如何将 bash 命令的输出捕获到变量中?
How to capture the output of a bash command into a variable when using pipes and apostrophe?
我不确定如何通过 bash 将命令的输出保存到变量中:
PID = 'ps -ef | grep -v color=auto | grep raspivid | awk '{print }''
我必须为撇号或竖线使用特殊字符吗?
谢谢!
要捕获 shell 中命令的输出,请使用命令替换:$(...)
。因此:
pid=$(ps -ef | grep -v color=auto | grep raspivid | awk '{print }')
备注
在shell中赋值时,等号两边不能有空格。
定义供本地使用的 shell 变量时,最好使用小写或混合大小写。对系统重要的变量以大写形式定义,您不希望不小心覆盖其中之一。
简化
如果目标是获取raspivid
进程的PID,那么grep
和awk
可以合并为一个进程:
pid=$(ps -ef | awk '/[r]aspivid/{print }')
注意从输出中排除当前进程的简单技巧:我们搜索 [r]aspivid
而不是搜索 raspivid
。字符串 [r]aspivid
与正则表达式 [r]aspivid
不匹配。因此,当前进程从输出中删除。
awk
的灵活性
为了展示 awk
如何替换对 grep
的多次调用,请考虑以下场景:假设我们要查找包含 raspivid
但 不包含color=auto
。使用awk
,两个条件可以逻辑组合:
pid=$(ps -ef | awk '/raspivid/ && !/color=auto/{print }')
此处,/raspivid/
需要与 raspivid
匹配。 &&
符号表示逻辑 "and"。正则表达式 /color=auto/
之前的 !
表示逻辑 "not"。因此,/raspivid/ && !/color=auto/
仅匹配包含 raspivid
但不包含 color=auto
.
的行
更直接的方法:
pid=$(pgrep raspivid)
我不确定如何通过 bash 将命令的输出保存到变量中:
PID = 'ps -ef | grep -v color=auto | grep raspivid | awk '{print }''
我必须为撇号或竖线使用特殊字符吗?
谢谢!
要捕获 shell 中命令的输出,请使用命令替换:$(...)
。因此:
pid=$(ps -ef | grep -v color=auto | grep raspivid | awk '{print }')
备注
在shell中赋值时,等号两边不能有空格。
定义供本地使用的 shell 变量时,最好使用小写或混合大小写。对系统重要的变量以大写形式定义,您不希望不小心覆盖其中之一。
简化
如果目标是获取raspivid
进程的PID,那么grep
和awk
可以合并为一个进程:
pid=$(ps -ef | awk '/[r]aspivid/{print }')
注意从输出中排除当前进程的简单技巧:我们搜索 [r]aspivid
而不是搜索 raspivid
。字符串 [r]aspivid
与正则表达式 [r]aspivid
不匹配。因此,当前进程从输出中删除。
awk
的灵活性
为了展示 awk
如何替换对 grep
的多次调用,请考虑以下场景:假设我们要查找包含 raspivid
但 不包含color=auto
。使用awk
,两个条件可以逻辑组合:
pid=$(ps -ef | awk '/raspivid/ && !/color=auto/{print }')
此处,/raspivid/
需要与 raspivid
匹配。 &&
符号表示逻辑 "and"。正则表达式 /color=auto/
之前的 !
表示逻辑 "not"。因此,/raspivid/ && !/color=auto/
仅匹配包含 raspivid
但不包含 color=auto
.
更直接的方法:
pid=$(pgrep raspivid)