Articles of bash

运行脚本启动

有没有办法启动时运行一个.sh脚本一次? 我知道的init.d文件夹,但似乎有一些奇怪的特殊布局,你必须使用脚本。 我只想运行两行代码,没什么大的。 我正在运行最新的Raspbian。 有小费吗?

当父母退出时终止subprocess

我正在为Docker准备一个脚本,它只允许一个顶级进程,它应该接收信号,以便我们可以阻止它。 因此,我有这样一个脚本:一个应用程序写入syslog(本示例中的bash脚本),另一个只是打印它。 #! /usr/bin/env bash set -eu tail -f /var/log/syslog & exec bash -c 'while true ; do logger aaaaaaaaaaaaaaaaaaa ; sleep 1 ; done' 几乎解决了:当顶级进程bash得到SIGTERM时 – 它存在,但是tail -f继续运行。 当父进程退出时,如何指示tail -f退出? 例如它也应该得到信号。 注意:不能使用bash陷阱,因为最后一行的exec完全取代了这个过程。

bashdate不使用设定的时区

我有 export TZ="/usr/share/zoneinfo/Europe/London" 在我的.bashrc文件中,但以下输出UTC(GMT) export TM=`date +%H%M%S` export DTTM="`date +%a\ %F\ %T\ %Z`"

“which”命令总是显示正确的文件/哪个二进制文件正在运行?

我正在使用Ubuntu 12.04 LTS,而且我显然已经搞乱了我的系统与各种版本的重复安装: 首先我从默认回购安装了0.6.18, 然后我尝试使用PPA中的 0.6.23 最后我从源码中build立了0.6.24并安装了它 (我列出这是完整的,但我不认为这是duplicity – 具体。) 现在我的系统的行为如下所示: root@host:~# duplicity -V duplicity 0.6.24 root@host:~# which -a duplicity /usr/bin/duplicity root@host:~# /usr/bin/duplicity -V duplicity 0.6.24 root@host:~# head /usr/bin/duplicity #!/usr/bin/python2.7 # -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*- # # duplicity — Encrypted bandwidth efficient backup # Version 0.6.23 released $reldate # # Copyright 2002 Ben Escoto […]

Bash if语句等于上一个命令的输出

我试图从最后一个命令与bash相等的东西如果声明: #!/bin/bash monit status if [ "status" != "error" ]; then echo -e "hostname\ttest\t0\t0" | /usr/sbin/send_nsca -H hostname -c /etc/send_nsca.cfg exit 1; fi 即使monit status status = online with all services都会运行echo命令。 我不知道如何使if语句匹配monit status输出的monit status 。

从bash运行同一个php脚本的多个实例

我正在运行一个cron作业,每分钟多次执行一个php文件 * * * * * /usr/bin/php /var/www/html/myFile.php >> /var/www/html/cronlog 2> /dev/null * * * * * sleep 10; /usr/bin/php /var/www/html/myFile.php >> /var/www/html/cronlog 2> /dev/null * * * * * sleep 20; /usr/bin/php /var/www/html/myFile.php >> /var/www/html/cronlog 2> /dev/null * * * * * sleep 30; /usr/bin/php /var/www/html/myFile.php >> /var/www/html/cronlog 2> /dev/null * * * * […]

运行Bash脚本另一台服务器

我想逐个运行命令,以便更改服务器上目录的名称。 当我运行脚本时,在服务器1中重命名的目录。但是,在服务器2中找不到目录。 脚本中的错误可能是什么? 脚本; #!/bin/bash mach_directory=/home/user/example erase_dir1=cache erase_dir2=tmp for i in {0..10} do user=user server=$(ssh $user@server$i hostname) ssh $user@$server find $mach_directory -type d -name $erase_dir1 ! -path "*Admin/$erase_dir1*" -print0 | while IFS= read -r -d '' file ; do mv "$file" "${file}_$(date +%d%m%Y)"; done ssh $user@$server find $mach_directory -type d -name $erase_dir2 ! -path "*Admin/$erase_dir2*" […]

Bash脚本应该死后继续重生

#!/bin/bash PID=$(pidof daemon) kill $PID while ps -e | grep "[d]aemon" >> /dev/null; do sleep 30 done sh -c /root/daemon 这个脚本被设置在一个cronjob上来杀死并重启这个程序。 它是这样做的,但是在脚本退出之后,它会保持重新生成,这使得手动守护守护进程非常困难。 它应该在子shell中重新启动程序,脚本应该死掉。

获取密码到ssh-keygen

我有一个新的私钥,作为bash脚本的一部分,它将作为Docker容器。 将私钥复制到/root/.ssh/id_rsa我想用以下方法重新生成公共密钥: ssh-keygen -yf /root/.ssh/id_rsa > /root/.ssh/id_rsa.pub 不幸的是,这导致了以下错误: 加载失败 我认为这是因为私钥有一个没有提供给ssh-keygen命令的密码,但是我不知道这是怎么回事。 我读过设置SSH_AUTH_SOCK环境variables就足够了,但它不适合我…仍然要求密码。 然后我碰到了使用-x参数的keygen命令的一个小变化: ssh-keygen -yf /root/.ssh/id_rsa > /root/.ssh/id_rsa.pub -x 令我非常吃惊的是它产生了结果。 正确的结果? 不确定。 实际上,结果与非“-x”变体(当提供密码短语时)明显不同。 我看了一下man文件,并没有提到-x 。 我很困惑。 任何帮助,将不胜感激。 寻找: 更好地理解-x作用以及如何有效地使用它 一种将我的私钥的密码传递给ssh-keygen (也是如此, git也会使用它)

SVN发布提交问题(调用Bash)

所有, 我想调用一个bash脚本(做一些rsync魔术)到我的post-commit hook结束。 这是我的后提交钩子看起来像: #!/bin/bash REPOS="$1" REV="$2" SVNLOOK="/usr/bin/svnlook" AWK="/usr/bin/awk" temp_dir="/var/www/vhosts/domain.com/temp"$(date +"%s") # to avoid conflict, append unix timestamp webroot_dev="/var/www/vhosts/domain.com/dev.project.com" webroot_alpha="/var/www/vhosts/domain.com/alpha.project.com" webroot_beta="/var/www/vhosts/domain.com/beta.project.com" webroot_live="/var/www/vhosts/domain.com/project.com" repo_dev="file:///var/svn/Echo/branches/Dev" repo_alpha="file:///var/svn/Echo/trunk" repo_beta="file:///var/svn/Echo/branches/Beta" repo_live="file:///var/svn/Echo/branches/Live" is_dev=`$SVNLOOK dirs-changed -r "$REV" "$REPOS" | grep -c "Dev"` is_alpha=`$SVNLOOK dirs-changed -r "$REV" "$REPOS" | grep -c "trunk"` is_beta=`$SVNLOOK dirs-changed -r "$REV" "$REPOS" | grep -c "Beta"` is_live=`$SVNLOOK dirs-changed […]