shell:在两个不同的变量中捕获命令输出和return状态
shell: capture command output and return status in two different variables
假设我正在使用 shell,例如 bash 或 zsh,并且假设我有一个写入标准输出的命令。我想将命令的输出捕获到一个 shell 变量中,并将命令的 return 代码捕获到另一个 shell 变量中。
我知道我可以做这样的事情...
command >tempfile
rc=$?
output=$(cat tempfile)
然后,我在 'rc' shell 变量中有 return 代码,在 'output' shell 变量中有命令的输出。
但是,我想在不使用任何临时文件的情况下执行此操作。
此外,我可以这样做以获得命令输出...
output=$(command)
...但是,我不知道如何将命令的 return 代码放入任何 shell 变量中。
任何人都可以建议一种在不使用任何文件的情况下将 return 代码和命令的输出同时获取到两个 shell 变量中的方法吗?
非常感谢。
像以前一样捕获 $?
。使用可执行文件 true
和 false
,我们可以证明 命令替换 确实设置了正确的 return 代码:
$ output=$(true); rc=$?; echo $rc
0
$ output=$(false); rc=$?; echo $rc
1
一次赋值中的多个命令替换
如果一个作业中出现多个命令替换,最后一个命令替换的 return 代码决定作业的 return 代码:
$ output="$(true) $(false)"; rc=$?; echo $rc
1
$ output="$(false) $(true)"; rc=$?; echo $rc
0
文档
来自 man bash
描述变量赋值的部分:
If one of the expansions contained a command substitution, the exit
status of the command is the exit status of the last command
substitution performed. If there were no command substitutions, the
command exits with a status of zero.
假设我正在使用 shell,例如 bash 或 zsh,并且假设我有一个写入标准输出的命令。我想将命令的输出捕获到一个 shell 变量中,并将命令的 return 代码捕获到另一个 shell 变量中。
我知道我可以做这样的事情...
command >tempfile
rc=$?
output=$(cat tempfile)
然后,我在 'rc' shell 变量中有 return 代码,在 'output' shell 变量中有命令的输出。
但是,我想在不使用任何临时文件的情况下执行此操作。
此外,我可以这样做以获得命令输出...
output=$(command)
...但是,我不知道如何将命令的 return 代码放入任何 shell 变量中。
任何人都可以建议一种在不使用任何文件的情况下将 return 代码和命令的输出同时获取到两个 shell 变量中的方法吗?
非常感谢。
像以前一样捕获 $?
。使用可执行文件 true
和 false
,我们可以证明 命令替换 确实设置了正确的 return 代码:
$ output=$(true); rc=$?; echo $rc
0
$ output=$(false); rc=$?; echo $rc
1
一次赋值中的多个命令替换
如果一个作业中出现多个命令替换,最后一个命令替换的 return 代码决定作业的 return 代码:
$ output="$(true) $(false)"; rc=$?; echo $rc
1
$ output="$(false) $(true)"; rc=$?; echo $rc
0
文档
来自 man bash
描述变量赋值的部分:
If one of the expansions contained a command substitution, the exit status of the command is the exit status of the last command substitution performed. If there were no command substitutions, the command exits with a status of zero.