我有两个进程foo和bar,用管道连接:
$ foo | bar
Run Code Online (Sandbox Code Playgroud)
bar总是退出 0;我对foo. 有什么办法可以得到吗?
我正在设置这样的变量:
myvar=$(command --params)
Run Code Online (Sandbox Code Playgroud)
之后我想检查$?我的命令的退出代码 ( )。$?像这样检查总是会返回,0因为它成功地将变量设置为命令的输出。
是否有可能获得 的返回值command?
我在脚本中看到过这样的结构:
if somevar="$(somecommand 2>/dev/null)"; then
...
fi
Run Code Online (Sandbox Code Playgroud)
这是在某处记录的吗?变量的返回状态是如何确定的,它与命令替换有什么关系?(例如,我会得到相同的结果if echo "$(somecommand 2>/dev/null)"; then吗?)
两个函数定义,唯一的区别是第一个将localstorage 关键字与赋值组合在一起,而第二个将它们分开:
function foo {
local fn=$(mktemp -p /path/does/not/exist 2>/dev/null)
echo $?
}
function bar {
local fn
fn=$(mktemp -p /path/does/not/exist 2>/dev/null)
echo $?
}
foo
bar
Run Code Online (Sandbox Code Playgroud)
这与“0”然后“1”相呼应。我希望它回声“1”然后是“1”。似乎的值$?是分配给 local 的结果,而不是命令替换的结果。
为什么 bash 4.2.46(1)-release 会这样?