标签: bash

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变量分配默认值

我在bash(3.00)shell脚本中对变量进行了大量测试,如果未设置变量,则会分配一个默认值,例如:

if [ -z "${VARIABLE}" ]; then 
    FOO='default'
else 
    FOO=${VARIABLE}
fi
Run Code Online (Sandbox Code Playgroud)

我似乎记得在一行中有一些语法,类似于三元运算符,例如:

FOO=${ ${VARIABLE} : 'default' }
Run Code Online (Sandbox Code Playgroud)

(虽然我知道这不起作用......)

我疯了,还是有类似的东西存在?

bash shell

612
推荐指数
12
解决办法
27万
查看次数

我们什么时候需要围绕shell变量的花括号?

在shell脚本中,我们{}何时在扩展变量时使用?

例如,我见过以下内容:

var=10        # Declare variable

echo "${var}" # One use of the variable
echo "$var"   # Another use of the variable
Run Code Online (Sandbox Code Playgroud)

是否存在显着差异,还是只是风格?一个比另一个更受欢迎吗?

syntax bash shell curly-braces

602
推荐指数
6
解决办法
22万
查看次数

检查Git中是否需要拉

如何检查远程存储库是否已更改,我需要拉?

现在我使用这个简单的脚本:

git pull --dry-run | grep -q -v 'Already up-to-date.' && changed=1
Run Code Online (Sandbox Code Playgroud)

但它相当沉重.

有没有更好的办法?理想的解决方案是检查所有远程分支,并返回已更改分支的名称和每个分支的新提交数.

git bash shell

600
推荐指数
15
解决办法
34万
查看次数

单行Bash无限循环的语法

我无法想出正确的分号和/或括号组合.我想这样做,但作为命令行的一行代码:

while [ 1 ]
do
    foo
    sleep 2
done
Run Code Online (Sandbox Code Playgroud)

bash loops while-loop

595
推荐指数
11
解决办法
61万
查看次数

使用bash和regex在一行中查找并终止进程

我经常需要在编程期间杀死进程.

我现在这样做的方式是:

[~]$ ps aux | grep 'python csp_build.py'
user    5124  1.0  0.3 214588 13852 pts/4    Sl+  11:19   0:00 python csp_build.py
user    5373  0.0  0.0   8096   960 pts/6    S+   11:20   0:00 grep python csp_build.py
[~]$ kill 5124
Run Code Online (Sandbox Code Playgroud)

如何自动提取进程ID并在同一行中终止它?

像这样:

[~]$ ps aux | grep 'python csp_build.py' | kill <regex that returns the pid>
Run Code Online (Sandbox Code Playgroud)

regex bash terminal awk

595
推荐指数
13
解决办法
46万
查看次数

如何确定我正在使用的当前shell?

如何确定我正在使用的当前shell?

ps仅仅命令的输出是否足够?

如何在不同版本的UNIX中完成?

unix bash shell csh tcsh

587
推荐指数
14
解决办法
46万
查看次数

在Bash中将字符串拆分为数组

在Bash脚本中,我想将一行分成几部分并将它们存储在一个数组中.

这条线:

Paris, France, Europe
Run Code Online (Sandbox Code Playgroud)

我想将它们放在这样的数组中:

array[0] = Paris
array[1] = France
array[2] = Europe
Run Code Online (Sandbox Code Playgroud)

我想用简单的代码,命令的速度无关紧要.我该怎么做?

arrays bash split

577
推荐指数
12
解决办法
79万
查看次数

获取自Linux上的Epoch以来的当前时间,Bash

我需要一些简单的东西date,但是自1970年以来的几秒钟而不是当前的日期,小时,分钟和秒.

date似乎没有提供这种选择.有一个简单的方法吗?

linux bash datetime

574
推荐指数
6
解决办法
47万
查看次数

如何比较Bash中'if'语句中的两个字符串变量?

我正在尝试使用Bash(使用Ubuntu)获得一个if声明:

#!/bin/bash

s1="hi"
s2="hi"

if ["$s1" == "$s2"]
then
  echo match
fi
Run Code Online (Sandbox Code Playgroud)

我尝试了各种形式的if语句,使用[["$s1" == "$s2"]],有和没有引号,使用=,==-eq,但我仍然得到以下错误:

[hi:命令未找到

我查看了各种网站和教程并复制了这些内容,但是它不起作用 - 我做错了什么?

最后,我想说是否$s1包含$s2,所以我该怎么做?

我刚刚解决了空位...:/我怎么说包含?

我试过了

if [[ "$s1" == "*$s2*" ]]
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

bash scripting if-statement

572
推荐指数
11
解决办法
102万
查看次数

标签 统计

bash ×10

shell ×5

linux ×2

arrays ×1

awk ×1

csh ×1

curly-braces ×1

datetime ×1

git ×1

if-statement ×1

loops ×1

regex ×1

scripting ×1

sh ×1

split ×1

syntax ×1

tcsh ×1

terminal ×1

unix ×1

while-loop ×1