bash : 解析命令的输出并存储到变量中
bash : parse output of command and store into variable
我已经下了命令 return 'version:X' .
即:
$>./mybox -v
$>version:2
我不明白为什么这不起作用:
$>VERSION=$( /home/mybox -v | sed 's/.*version:\([0-9]*\).*//')
$>echo $VERSION
$>
如果我写这个,就可以了:
$>VERSION=$( echo "version:2" | sed 's/.*version:\([0-9]*\).*//')
$>echo $VERSION
$>2
此致
将 version/error/debugging 信息发送到 stderr
而不是 stdout
是很常见的。当 运行 来自终端的命令时,两者都将被打印,但只有 stdout
会通过管道到达 sed
.
echo
默认情况下输出始终为 stdout
,这就是为什么您在那里没有遇到问题的原因。
如果以上内容正确,您只需要在传递之前将 stderr
(文件描述符 2)重定向到 stdout
(文件描述符 1):
VERSION=$( /home/mybox -v 2>&1 | sed 's/.*version:\([0-9]*\).*//')
# ^^^^
我已经下了命令 return 'version:X' .
即:
$>./mybox -v
$>version:2
我不明白为什么这不起作用:
$>VERSION=$( /home/mybox -v | sed 's/.*version:\([0-9]*\).*//')
$>echo $VERSION
$>
如果我写这个,就可以了:
$>VERSION=$( echo "version:2" | sed 's/.*version:\([0-9]*\).*//')
$>echo $VERSION
$>2
此致
将 version/error/debugging 信息发送到 stderr
而不是 stdout
是很常见的。当 运行 来自终端的命令时,两者都将被打印,但只有 stdout
会通过管道到达 sed
.
echo
默认情况下输出始终为 stdout
,这就是为什么您在那里没有遇到问题的原因。
如果以上内容正确,您只需要在传递之前将 stderr
(文件描述符 2)重定向到 stdout
(文件描述符 1):
VERSION=$( /home/mybox -v 2>&1 | sed 's/.*version:\([0-9]*\).*//')
# ^^^^