相关疑难解决方法(0)

获取通过管道传输到另一个进程的退出状态

我有两个进程foobar,用管道连接:

$ foo | bar
Run Code Online (Sandbox Code Playgroud)

bar总是退出 0;我对foo. 有什么办法可以得到吗?

shell pipe exit

392
推荐指数
11
解决办法
20万
查看次数

我可以从使用 $(command) 启动的子 shell 获取退出代码吗?

我正在设置这样的变量:

myvar=$(command --params)
Run Code Online (Sandbox Code Playgroud)

之后我想检查$?我的命令的退出代码 ( )。$?像这样检查总是会返回,0因为它成功地将变量设置为命令的输出。

是否有可能获得 的返回值command

bash shell-script command-substitution exit-status

28
推荐指数
1
解决办法
2万
查看次数

如何确定变量赋值的返回状态?

我在脚本中看到过这样的结构:

if somevar="$(somecommand 2>/dev/null)"; then
...
fi
Run Code Online (Sandbox Code Playgroud)

这是在某处记录的吗?变量的返回状态是如何确定的,它与命令替换有什么关系?(例如,我会得到相同的结果if echo "$(somecommand 2>/dev/null)"; then吗?)

bash command-substitution variable exit-status

14
推荐指数
1
解决办法
3257
查看次数

为什么本地 fn=$(...) 掩盖了 $?状态码

两个函数定义,唯一的区别是第一个将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 会这样?

bash

5
推荐指数
1
解决办法
533
查看次数