相关疑难解决方法(0)

set -e在bash脚本中的含义是什么?

我正在研究脚本在从Debian存档(.deb)文件解压缩该包之前执行的这个preinst文件的内容.

该脚本具有以下代码:

#!/bin/bash
set -e
# Automatically added by dh_installinit
if [ "$1" = install ]; then
   if [ -d /usr/share/MyApplicationName ]; then
     echo "MyApplicationName is just installed"
     return 1
   fi
   rm -Rf $HOME/.config/nautilus-actions/nautilus-actions.conf
   rm -Rf $HOME/.local/share/file-manager/actions/*
fi
# End automatically added section
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是关于这一行:

set -e
Run Code Online (Sandbox Code Playgroud)

我认为脚本的其余部分非常简单:它检查Debian/Ubuntu包管理器是否正在执行安装操作.如果是,它会检查我的应用程序是否刚刚安装在系统上.如果有,脚本将打印消息"MyApplicationName刚刚安装"并结束(return 1意味着以"错误"结束,不是吗?).

如果用户要求Debian/Ubuntu软件包系统安装我的软件包,该脚本还会删除两个目录.

这是对的还是我错过了什么?

linux bash shell sh

617
推荐指数
9
解决办法
34万
查看次数

出错时自动退出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万
查看次数

如何让GNU明确测试失败?

经过多年没有使用make,我发现自己需要它,现在是gnu版本.我很确定我应该能够做我想做的事情,但是没有弄清楚如何,或者找到谷歌的答案等.

我正在尝试创建一个测试目标,它将多次执行我的程序,将结果保存在日志文件中.一些测试应该导致我的程序中止.不幸的是,我的makefile在第一次测试时中止,导致错误.我有类似的东西:

# Makefile
# 
test:
        myProg -h > test.log              # Display help
        myProg good_input >> test.log     # should run fine
        myProg bad_input1 >> test.log      # Error 1
        myProg bad_input2 >> test.log      # Error 2
Run Code Online (Sandbox Code Playgroud)

使用上面的命令,在bad_input1运行后退出,永远不会运行bad_input2.

makefile gnu-make

62
推荐指数
3
解决办法
2万
查看次数

按顺序在bash脚本中执行多个命令,如果至少其中一个命令失败,则会失败

我有一个bash脚本,我用它来按顺序执行多个命令,如果序列中至少有一个命令返回非零退出代码,我需要返回非零退出代码.我知道有一个wait命令,但我不确定我是否理解如何使用它.

UPD脚本如下所示:

#!/bin/bash
command1
command2
command3
Run Code Online (Sandbox Code Playgroud)

所有命令都在前台运行.无论上一个命令返回哪个退出状态,所有命令都需要运行(因此它不能表现为"第一次出错时退出").基本上我需要收集所有退出状态并相应地返回全局退出状态.

bash

33
推荐指数
2
解决办法
2万
查看次数

Windows 上 npm run 脚本中 shell 脚本的退出状态

我有一个非常简单的 shell 脚本,test.sh

#!/usr/bin/env bash

exit 1
Run Code Online (Sandbox Code Playgroud)

我从我的test运行脚本中调用它package.json

"scripts": {
  "test": "test.sh && echo \"unexpected output\""
},
Run Code Online (Sandbox Code Playgroud)

运行npm test我得到这个:

$ npm test

> testtest@1.0.0 test C:\Users\[path]\testtest
> test.sh && echo "unexpected output"

"unexpected output"
Run Code Online (Sandbox Code Playgroud)

看起来 npm 并不关心 test.sh 的非零退出代码。我没想到会看到“意外的输出”。

"test"当命令执行的步骤之一(test.sh在本例中)因错误退出时,如何使命令的执行停止?

在我的 package.json 中:"test": "test.sh && echo $?",
这是输出:

$ npm test

> testtest@1.0.0 test C:\Users\[path]\testtest
> test.sh && echo $?

$?
Run Code Online (Sandbox Code Playgroud)

有了这个:"test": "test.sh && echo \"$?\"",
我得到这个:

$ npm …
Run Code Online (Sandbox Code Playgroud)

windows bash node.js npm

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

标签 统计

bash ×4

shell ×2

error-handling ×1

exit ×1

gnu-make ×1

linux ×1

makefile ×1

node.js ×1

npm ×1

sh ×1

windows ×1