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

亚历克斯

我知道那set -e是我的朋友,以便错误退出。但是,如果脚本是源程序,例如从控制台执行功能,该怎么办?我不想在出错时关闭控制台,我只想停止脚本并显示错误消息。

我需要检查美元吗?手工执行的每个命令使之成为可能?

这是一个myScript.sh显示问题的示例脚本

#!/bin/sh
set -e

copySomeStuff()
{
    source="$1"
    dest="$2"
    cp -rt "$source" "$dest"
    return 0
}

installStuff()
{
    dest="$1"
    copySomeStuff dir1 "$dest"
    copySomeStuff dir2 "$dest"
    copySomeStuff nonExistingDirectory "$dest"
}

该脚本的用法如下:

$ source myScript.sh
$ installStuff

这将关闭控制台。显示的错误cp丢失。

库萨兰达

我建议您使用一个脚本作为子外壳程序运行,可能会提供一个文件以读取函数定义。让该脚本errexit为其自身设置shell选项。

source从命令行使用时,“脚本”实际上是您的交互式外壳。退出意味着终止外壳会话。可能有一些解决方法,但是,如果要设置errexit会话,最好的选择就是:

#!/bin/bash

set -o errexit

source file_with_functions
do_things_using_functions

附加好处:不会污染具有功能的交互式会话。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Shellscript If 语句返回错误

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

system()返回错误的退出代码

在 IIS 中启用 https 时,错误请求错误返回“错误”而不是错误消息

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

MulVAL中的错误:“ mylval”的多个定义;collect2:错误:ld返回1退出状态

我在C ++中收到错误“ [错误] ld返回了1个退出状态”。帮我这个

Python子进程返回错误的退出代码

ld返回1错误退出状态C ++

Restify返回未定义不是错误对象中的函数

结果中的文本(而不是数字)返回mysqli未知列错误

collect2:错误:ld在c ++中返回了1个退出状态

为什么subprocess.run返回退出代码2,但日志中没有错误?

从 Shellcode 返回而不是退出

setdiff(x,y)错误:仅在x中而不是y中返回x而不是值

在线程对象上出现错误而不是属性退出

Groovysh中退出的未知属性错误

在bash中退出并显示错误消息(单行)

在别名中设置错误的退出代码

退出窗口时 tkinter 中的标签错误

退出分段错误 C 中的结构

NetBean中的错误,但javac不是错误?

错误中的错误:NgModule不是NgModule

jQuery Post返回错误而不是数据

如何让 VideoCapture 返回错误而不是警告?

MySql 子查询运行而不是返回错误

NSURLConnection返回错误而不是响应401

_getAsyncTracker()返回错误:undefined不是函数

附加警告消息返回错误而不是警告