我正在研究脚本在从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软件包系统安装我的软件包,该脚本还会删除两个目录.
这是对的还是我错过了什么?
我在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)
(虽然我知道这不起作用......)
我疯了,还是有类似的东西存在?
在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)
是否存在显着差异,还是只是风格?一个比另一个更受欢迎吗?
如何检查远程存储库是否已更改,我需要拉?
现在我使用这个简单的脚本:
git pull --dry-run | grep -q -v 'Already up-to-date.' && changed=1
Run Code Online (Sandbox Code Playgroud)
但它相当沉重.
有没有更好的办法?理想的解决方案是检查所有远程分支,并返回已更改分支的名称和每个分支的新提交数.
我无法想出正确的分号和/或括号组合.我想这样做,但作为命令行的一行代码:
while [ 1 ]
do
foo
sleep 2
done
Run Code Online (Sandbox Code Playgroud) 我经常需要在编程期间杀死进程.
我现在这样做的方式是:
[~]$ 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) 如何确定我正在使用的当前shell?
ps仅仅命令的输出是否足够?
如何在不同版本的UNIX中完成?
在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)
我想用简单的代码,命令的速度无关紧要.我该怎么做?
我需要一些简单的东西date,但是自1970年以来的几秒钟而不是当前的日期,小时,分钟和秒.
date似乎没有提供这种选择.有一个简单的方法吗?
我正在尝试使用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)
但它不起作用.