我有一个脚本,当我想要它时它不会退出。
具有相同错误的示例脚本是:
#!/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
如果不是脚本,退出是什么?
( du /etc; du /var; ) > tmp.txt
{ du /etc; du /var; } > tmp.txt
Run Code Online (Sandbox Code Playgroud)
() 和 {} 之间有区别吗?
tmp.txt 的输出似乎完全相同,我想知道我是否在这里遗漏了什么。
我确定这是张贴在某个地方,但我一直找不到它。
在 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
如果CHRUBY
是Y
或则调用函数y
,并且die
仅当installChruby
函数返回 false时才调用函数。
Bash 中是否有一个运算符可以执行此操作 …