相关疑难解决方法(0)

出错时自动退出bash shell脚本

我一直在编写一些shell脚本,如果能够在任何命令失败的情况下暂停执行所述shell脚本,我会发现它很有用.请参阅下面的示例:

#!/bin/bash  

cd some_dir  

./configure --some-flags  

make  

make install
Run Code Online (Sandbox Code Playgroud)

因此,在这种情况下,如果脚本无法更改为指示的目录,那么如果失败,它肯定不会在之后执行./configure.

现在我很清楚我可以对每个命令进行if检查(我认为这是一个无望的解决方案),但是如果其中一个命令失败,是否有全局设置使脚本退出?

error-handling bash shell exit

564
推荐指数
8
解决办法
23万
查看次数

基于进程退出代码退出Shell脚本

我有一个执行许多命令的shell脚本.如果任何命令以非零退出代码退出,如何使shell脚本退出?

bash shell

372
推荐指数
8
解决办法
41万
查看次数

如果命令失败,如何退出?

我是shell脚本中的菜鸟.如果命令失败,我想打印一条消息并退出我的脚本.我试过了:

my_command && (echo 'my_command failed; exit)
Run Code Online (Sandbox Code Playgroud)

但它不起作用.它不断执行脚本中此行之后的指令.我正在使用Ubuntu和bash.

linux bash exit exitstatus

193
推荐指数
8
解决办法
14万
查看次数

为什么测试"$?" 一个反模式,看一个命令是否成功?

在这里看到测试是否$?是零(成功)或其他东西(失败)是反模式,但我无法在其他任何地方找到它.

坚持维基百科反模式的定义:"反模式(或反模式)是对反复出现的问题的常见反应,这种反复出现的问题通常是无效的,并且可能会产生极大的反作用." 为什么这会是反模式?

bash shell sh

8
推荐指数
1
解决办法
476
查看次数

在shell脚本中捕获失败

对shell脚本来说很新.我正在尝试执行以下操作:

#!/bin/bash

unzip myfile.zip

#do stuff if unzip successful
Run Code Online (Sandbox Code Playgroud)

我知道我可以将命令链接在一起,&&但是有很多块,它不会非常可维护.

unix bash shell

7
推荐指数
3
解决办法
8774
查看次数

使用 && 和 || 在多行 bash 脚本中

echo hello; echo hi
Run Code Online (Sandbox Code Playgroud)

在脚本中与此相同:

echo hello
echo hi
Run Code Online (Sandbox Code Playgroud)

我如何对以下可能性做同样的事情?

echo hello && echo hi
echo hello || echo hi
Run Code Online (Sandbox Code Playgroud)

我想我可以这样做:

echo hello && \
echo hi

echo hello || \
echo hi 
Run Code Online (Sandbox Code Playgroud)

但这或多或少是在模仿多行脚本

这样做的合适方法是什么?

编辑:我知道 && 和 || 工作,我只是想知道如何在多行脚本中有效地复制它

bash

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

从 python 异常中终止 Bash 脚本

我有一个 shell 脚本在里面调用 Python。

#! /bin/bash

shopt -s extglob
echo "====test===="
~/.conda/envs/my_env/bin/python <<'EOF'

import sys
import os


try:
    print("inside python")
    x = 2/0
except Exception as e:
    print("Exception: %s" % e)
    sys.exit(2)
print("at the end of python")
EOF
echo "end of script"
Run Code Online (Sandbox Code Playgroud)

如果我执行此命令,下面的行仍然会被打印。

"end of script"
Run Code Online (Sandbox Code Playgroud)

我想在python脚本的异常块中退出shell并让脚本无法到达EOF

有没有办法subprocessexcept上面的块中创建并杀死 a ,这将杀死整个 shell 脚本?

我可以生成一个虚拟子进程并通过杀死整个 shell 脚本来在异常块内杀死它吗?

任何例子都会有帮助。提前致谢。

python bash shell subprocess sh

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

使 bash wait 命令在第一个错误时失败

我有一个 bash 脚本,可以并行执行一些耗时的命令,到目前为止它运行得很好。我正在使用等待命令,如下所示:

docker pull */* &
docker pull */* &
docker pull */* &
docker pull */* &
docker pull */* &
docker pull */* &
docker pull */* &
composer install -n &
wait
Run Code Online (Sandbox Code Playgroud)

现在,我希望此脚本中止所有命令,并在其中一个命令失败时给出退出代码。如何实现这一目标?

注:*/*是docker镜像名称,对于上下文来说不重要

bash

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

标签 统计

bash ×8

shell ×5

exit ×2

sh ×2

error-handling ×1

exitstatus ×1

linux ×1

python ×1

subprocess ×1

unix ×1