我正在研究脚本在从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软件包系统安装我的软件包,该脚本还会删除两个目录.
这是对的还是我错过了什么?
我一直在编写一些shell脚本,如果能够在任何命令失败的情况下暂停执行所述shell脚本,我会发现它很有用.请参阅下面的示例:
#!/bin/bash
cd some_dir
./configure --some-flags
make
make install
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,如果脚本无法更改为指示的目录,那么如果失败,它肯定不会在之后执行./configure.
现在我很清楚我可以对每个命令进行if检查(我认为这是一个无望的解决方案),但是如果其中一个命令失败,是否有全局设置使脚本退出?
经过多年没有使用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.
我有一个bash脚本,我用它来按顺序执行多个命令,如果序列中至少有一个命令返回非零退出代码,我需要返回非零退出代码.我知道有一个wait
命令,但我不确定我是否理解如何使用它.
UPD脚本如下所示:
#!/bin/bash
command1
command2
command3
Run Code Online (Sandbox Code Playgroud)
所有命令都在前台运行.无论上一个命令返回哪个退出状态,所有命令都需要运行(因此它不能表现为"第一次出错时退出").基本上我需要收集所有退出状态并相应地返回全局退出状态.
我有一个非常简单的 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)