相关疑难解决方法(0)

为什么 ( exit 1 ) 不退出脚本?

我有一个脚本,当我想要它时它不会退出。

具有相同错误的示例脚本是:

#!/bin/bash

function bla() {
    return 1
}

bla || ( echo '1' ; exit 1 )

echo '2'
Run Code Online (Sandbox Code Playgroud)

我假设会看到输出:

:~$ ./test.sh
1
:~$
Run Code Online (Sandbox Code Playgroud)

但我实际上看到:

:~$ ./test.sh
1
2
:~$
Run Code Online (Sandbox Code Playgroud)

()命令链是否以某种方式创建了一个范围?exit如果不是脚本,退出是什么?

shell-script exit subshell

60
推荐指数
3
解决办法
5万
查看次数

终端中括号和大括号之间的区别?

( du /etc; du /var; ) > tmp.txt

{ du /etc; du /var; } > tmp.txt
Run Code Online (Sandbox Code Playgroud)

() 和 {} 之间有区别吗?

tmp.txt 的输出似乎完全相同,我想知道我是否在这里遗漏了什么。

shell

27
推荐指数
1
解决办法
8436
查看次数

Bash - 如何在不创建子shell的情况下显式设置运算符优先级

我确定这是张贴在某个地方,但我一直找不到它。

在 Bash 中,如何在不创建子 shell 的情况下指定运算符优先级(又名命令分组)?在大多数其他语言中,()这样做,但在 Bash 中,它在“丢弃”环境更改的子外壳中运行命令。我想在不丢失环境更改的情况下指定运算符优先级。

具体来说,我想做这样的事情,并让整个脚本退出,而不仅仅是 中的子shell ()

die ()
{
    echo "[DIE]: $1"
    exit 1
}

# When installChruby returns an error, print the error message and exit
[[ $CHRUBY =~ [Yy] ]] && (installChruby || die "Error installing chruby")
Run Code Online (Sandbox Code Playgroud)

我通过这样做找到了一个“解决方法”,但它不是我想要的一个漂亮的单线:

if [[ $CHRUBY =~ [Yy] ]]; then installChruby || die "Error installing Chruby"; fi 
Run Code Online (Sandbox Code Playgroud)

期望的结果是什么都不做并在CHRUBY未设置时继续,installChruby如果CHRUBYY或则调用函数y,并且die仅当installChruby函数返回 false时才调用函数。

Bash 中是否有一个运算符可以执行此操作 …

shell bash subshell

7
推荐指数
1
解决办法
549
查看次数

标签 统计

shell ×2

subshell ×2

bash ×1

exit ×1

shell-script ×1