我一直在编写一些shell脚本,如果能够在任何命令失败的情况下暂停执行所述shell脚本,我会发现它很有用.请参阅下面的示例:
#!/bin/bash
cd some_dir
./configure --some-flags
make
make install
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,如果脚本无法更改为指示的目录,那么如果失败,它肯定不会在之后执行./configure.
现在我很清楚我可以对每个命令进行if检查(我认为这是一个无望的解决方案),但是如果其中一个命令失败,是否有全局设置使脚本退出?
我是shell脚本中的菜鸟.如果命令失败,我想打印一条消息并退出我的脚本.我试过了:
my_command && (echo 'my_command failed; exit)
Run Code Online (Sandbox Code Playgroud)
但它不起作用.它不断执行脚本中此行之后的指令.我正在使用Ubuntu和bash.
对shell脚本来说很新.我正在尝试执行以下操作:
#!/bin/bash
unzip myfile.zip
#do stuff if unzip successful
Run Code Online (Sandbox Code Playgroud)
我知道我可以将命令链接在一起,&&
但是有很多块,它不会非常可维护.
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)
但这或多或少是在模仿多行脚本
这样做的合适方法是什么?
编辑:我知道 && 和 || 工作,我只是想知道如何在多行脚本中有效地复制它
我有一个 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
有没有办法subprocess
在except
上面的块中创建并杀死 a ,这将杀死整个 shell 脚本?
我可以生成一个虚拟子进程并通过杀死整个 shell 脚本来在异常块内杀死它吗?
任何例子都会有帮助。提前致谢。
我有一个 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镜像名称,对于上下文来说不重要