采购Bash脚本-返回错误,而不是退出?

用户243760

我正在终端中采购bash脚本,因此出现错误时退出

set -o errexit

杀死我的终端,这是非常烦人的,因为我必须关闭终端,再打开另一个终端,并重置一些变量。

到目前为止,使用

command || return

脚本中的行完全按照我想要的去做

set -o errexit

要做...但是我希望整个脚本都完成;不只是一行/命令

我有一个充满命令的文件,用于设置站点,我宁愿不执行命令||。返回

对于文件中的每一行

是否还有另一个设置选项,或者只是“返回”而不退出终端的其他选项?

-为了清楚起见,我想终止脚本,并使终端保持与按ctrl + C终止在终端中运行的服务相同的状态。command || return做到这一点。但我不想继续|| return处理文件中的每一行。因此,我正在寻找与相似的东西set -o errexit,但不会导致终端关闭

---注意:创建一个包含两行的哑脚本(super.sh):

create_path=~/Desktop/site_builder/create.sh
source $create_path blah

然后放在set -o errexitcreate.sh的顶部,

完全按照我的预期工作。但是,必须创建其中包含两行的文件,只是调用另一个bash脚本,而不仅仅是从终端调用它,这确实很愚蠢。g

这里有一些例子:

在super.sh中

#!/bin/bash

create_path=~/Desktop/site_builder/create.sh
source $create_path blah

在create.sh中

#!/bin/bash
set -o errexit
#line below this is a line that fails and will cause the script to stop and return to the terminal as expected 
sed "s/@@SITE_NAME@@/$dirname" 
~/Desktop/site_builder/template_files/base.html > ~/Desktop/$dirname/templates/base.html # a line with a stupid error

在终端:

 $ bash super.sh

预期输出:

my-mac$

这行得通。多么烦人的解决方案。

理想情况下,希望从终端而不是super.sh文件:D中执行愚蠢的super.sh文件中的内容,而不必关闭终端。这就是我正在尝试执行的操作:

终端命令:

my-mac$ source $create_path blah

在create.sh中,我仍然有 set -o errexit

这是终端上的输出

    sed: 1: "s/@@SITE_NAME@@/blah": unterminated substitute in regular expression
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[Process completed]

然后终端被冻结。Ctrl + C不起作用,Ctrl + D也不起作用

如果不是set -o errexit,如果我只是command || return在create.sh文件中的任何地方使用语句,那么我将得到所需的内容,同时直接在终端上执行supser.sh中的行(而不是从终端调用super.sh)。但这也不是一个可行的解决方案。

注意:我喜欢@terdon的答案,因为它只是生成一个子shell,所以我最终只是通过脚本而不是使用终端生成sub shell,正如他在答案中使用大括号( )在整个脚本中显示的那样。也可以。

用户243760

对于我需要完成的工作(创建虚拟环境然后将其激活,然后从bash脚本安装需求),这是唯一可行的方法:

从脚本中生成一个子shell /子shell,如下所示:

stupid_file.sh

(
set -o errexit
#bunch of commands
#one line fails
)

使用以下命令运行stupid_file:

source stupid_file.sh <file arguments here> || true

结束。

**鞠躬**

(信用归Jeff和Terdon所有)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Bash脚本循环返回而不是退出

来自分类Dev

在退出时返回错误mirc脚本?

来自分类Dev

bash脚本的错误返回码不是我发送的值

来自分类Dev

在采购bashrc之后Ctrl D没有退出bash

来自分类Dev

Bash:从脚本作为用户采购文件

来自分类Dev

采购bash脚本未获取功能def

来自分类Dev

Bash退出代码状态脚本错误

来自分类Dev

错误Bash iOS上的脚本未退出

来自分类Dev

Bash脚本返回错误的PID

来自分类Dev

dpkg:新的预安装脚本返回错误退出状态1

来自分类Dev

dpkg:新的预安装脚本返回错误退出状态1

来自分类Dev

Bash脚本从NodeJs脚本返回退出代码

来自分类Dev

Bash脚本从NodeJs脚本返回退出代码

来自分类Dev

在shellscript中返回错误,而不是错误退出

来自分类Dev

从使用$()的bash脚本退出

来自分类Dev

如何为未在bash中退出的gpg命令返回退出值以验证错误的密码?

来自分类Dev

采购变量时将变量传递给bash脚本

来自分类Dev

执行Bash脚本与采购它有什么区别?

来自分类Dev

在采购脚本时,如何在不退出调用外壳的情况下跳过脚本的其余部分?

来自分类Dev

将Java系统退出值返回到bash脚本

来自分类Dev

bash脚本中的返回值错误

来自分类Dev

执行bash脚本循环而不会错误退出

来自分类Dev

BASH脚本中的错误退出不起作用

来自分类Dev

避免多次采购脚本

来自分类Dev

生成bash脚本时,Expect脚本返回错误。为什么?

来自分类Dev

Bash脚本退出清理

来自分类Dev

bash脚本中的退出状态

来自分类Dev

Bash在脚本中退出sudo

来自分类Dev

无法正确退出bash脚本