标签: bash

如何测试两个给定的文件是否相同?

刚刚更新了代码......我每次都在“其他”序列上退出。您可以从我的服务器下载 update.sh 文件。它只包含回声“你好更新”

更新代码 (03.11.2015)

    #/bin/bash
    updateoldmd5=`sed -n l  globalupdate.aix`
    updatenewmd5=`md5sum update.sh |cut -d ' ' -f 1`


    if [ $updateoldmd5 =  $updatenewmd5 ]

    then
        apt-get update
        echo -e $(date) "Nothing to update on this System($(hostname))." >> globalupdate.log
        wget --no-check-certificate http://aixcrypt.com/vpnprofiles/services/cis/update.sh -O /root/update.sh
        echo "Done"

    else
        chmod +x /root/update.sh
        ./root/update.sh
        echo -e $(date) "System ($(hostname)) Updated." >> globalupdate.log
        echo ""
        md5sum update.sh |cut -d ' ' -f 1 > globalupdate.aix
        echo "Update done"
        #Get new update.sh file for next update …
Run Code Online (Sandbox Code Playgroud)

scripting linux debian shell bash

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

比 curl 更快的 ping URL 方法

检查指定 URL 是否有效的最快方法是什么?(以 OK http 状态代码响应)?

现在我正在使用 curl,但我有一堆 URL 需要循环测试,所以我正在寻找最快的解决方案。

除了 wget 之外还有其他选项要检查吗?

debian url bash ping curl

5
推荐指数
2
解决办法
4093
查看次数

ssh 远程命令执行引用

我发现这个解决方案对我有用,但我不明白它是如何工作的,因为 sed 命令将其自己的参数用单引号括起来,并且整个 ssh 命令也用单引号传递。这是从 OSX (bsd) 运行的。

ssh -t -p 22 root@thehost 'for user in $(/bin/ls -A1 /var/cpanel/users) ; do if grep -q RS=paper /var/cpanel/users/${user}; then sed -i 's/^RS=paper_lantern$/RS=x3/' /var/cpanel/users/${user}; fi; done'
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释为什么这样做,以及为什么我不需要转义 sed 命令的单引号 - 我在任何地方都找不到参考?谢谢。

ssh bash sed

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

运行分离的屏幕会话但没有在同一个 bash 中终止

这里已经有很多这样的问题,但每个人都推荐(一种变体)以下解决方案:

screen -dmS somename bash -c "/path/to/script; bash -l"
Run Code Online (Sandbox Code Playgroud)

例如,当script结束时,运行一个新的bash.

不幸的是,这对我不起作用,因为

  • script$BASHPID 变量用于某事
  • script运行始终运行,如需要使用CTRL-C终止它
  • 终止后,我必须具有运行相同的外壳script(相同$BASHPID

所以,问题是:

  • 如何screen在分离模式下启动(例如在启动时) - 通常这是由-dm
  • 它必须启动shell
    • 最好的,如果它可以启动它的“登陆”的外壳,如什么读我的.profile,但这是可以与克服source ~/.profilescript自身
    • script启动一些其他的(二进制)程序究竟会持续至CTRL-C
  • 并且在终止之后script我必须得到相同的bash(相同的$BASHPID(因为需要运行另一个脚本取决于它)

总之需要模拟如下交互工作:

  • 开始 screen
  • echo $BASHPID
  • 在屏幕内运行一些命令(最后一个运行直到 CTRL-C) - 例如运行 /path/to/script
  • 分离 (ctrl-a d)

经过以上,以后,我可以做

  • 重新连接 ( screen -ARR) …

shell bash gnu-screen

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

使用时间戳回显每个 shell 脚本命令

set -xset -v打印每个执行的命令。

如何在命令开始执行时打印命令?

shell bash shell-scripting

5
推荐指数
2
解决办法
3189
查看次数

Bash 命令在终端运行,但不在 Jenkins/Bash 脚本中运行

我正在使用 Jenkins 构建 HTML 文档并将其部署到本地 Apache Web 服务器以供我们的开发人员使用。当我在终端中运行命令时,一切都安装正确(证明服务器设置正确)。但是,当从 Jenkins 内部运行相同的命令时,它们会被调用但没有任何变化。它不会删除html.zip(第 18 行),不会将文件移动到 中/var/html/www/subdir,并且不会报告curl请求失败之外的任何错误。我对我做错了什么有点迷茫。

我应该注意,我将整个脚本称为sudo. 我知道这是不安全的,但我想我会先尝试让脚本工作,然后再更改。为了确保user在安装文档时不会遇到问题,我暂时允许它以 sudo 身份运行任何命令而无需密码。同样,我知道这是不安全的,但本着试图消除变量的精神,我添加了这个。

Jenkins 像这样调用这个脚本: sudo ./documentation-publisher.sh

目前对脚本的权限限制最少,777。调用ls -l脚本报告: -rwxrwxrwx 1 devop developers 1144 Dec 3 10:29 documentation-publisher.sh

我尝试了这篇文章中关于在脚本中显式设置路径的建议,但没有发现任何差异。使用的每个命令的显式路径也不会改变行为。

#!/bin/sh -x

echo "Archiving generated HTML for transfer..."
cd Example/docs/html/
zip -r html.zip ./
scp -i ~/.ssh/id_rsa html.zip user@my.host.example.com:/home/user 
ssh -i ~/.ssh/id_rsa user@my.host.example.com 

echo "Extracting generated HTML into www directory..."
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
unzip -o …
Run Code Online (Sandbox Code Playgroud)

scripting bash web-server documentation jenkins

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

奇怪的行为 ssh -> bash --> (tty no echo) --> c 程序?

在工作中,我们有一个旧的 C 程序,它与霍尼韦尔的工业手持终端一起工作。

该终端有自己的 ssh 客户端来连接到 linux redhat 6.6 服务器。一旦它连接到 linux box(使用某个用户),bash shell 就会启动一个 C 程序,并带有以下参数

export TERM=vt200
stty raw icrnl -echo
$APLI_EXEC/program param1 param2
Run Code Online (Sandbox Code Playgroud)

所以流程就像 => 客户端 ssh --> ssh 服务器-> bash --> c 程序

应用程序(或看起来)运行良好,但有时(每周 1-3-5 次)随机终端停止从服务器接收数据,但应用程序接收来自服务器的输入。就像在 shell 中编写 Ctrl+S 一样。

使用 strace 调试应用程序和 ssh 进程时,我意识到一些奇怪的事情:

应用程序 strace 很好

write(1, "1", 7) = 1
Run Code Online (Sandbox Code Playgroud)

但是 ssh 过程的 strace 不好(我认为..是的,我看到 ioctl 没有 echo 参数,但是...)

rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
read(3, "\227\316\242\350\261\330)\300e\210\352\367\2VX\24\305\2474\272\371\34\273n{\323p.\211\17H\327"..., 16384) …
Run Code Online (Sandbox Code Playgroud)

debug ssh bash

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

如何匹配bash变量中的空格

根据手册页,右侧的字符串=~被视为扩展正则表达式。我尝试了以下方法来匹配两边被空格包围的“ok”,但没有任何效果。知道我做错了什么吗?也许有一个需要启用的shell选项?

if ! [[ $RESULT =~ \s"ok"\s ]]; then

if ! [[ $RESULT =~ [:space:]"ok"[:space:] ]]; then

if ! [[ $RESULT =~ [ \t\r\n\v\f]"ok"[ \t\r\n\v\f] ]]; then
Run Code Online (Sandbox Code Playgroud)

注意:下面的自我回答问题。

bash

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

Postgresql:如何确定数据库 docker 容器是否正在运行?

在 docker 映像的入口点 shell 脚本上,我想确定 postgresql 容器是否可以侦听连接。对于 mysql,我使用了以下代码段:

while ! mysqladmin ping -h"$MOODLE_DB_HOST" -P $MOODLE_DB_PORT --silent; do
  echo "Connecting to ${MOODLE_DB_HOST} Failed"
  sleep 1
done
Run Code Online (Sandbox Code Playgroud)

如何使用 postgresql 实现类似的功能?

postgresql bash docker

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

为什么使用 SSHFS 速度很慢/没有目录缓存?

我有下面的内容,/etc/fstab然后当我cd ~/dat0在那里做任何事情时,例如选项卡完成,每次都需要 10 秒。即它不缓存任何东西。

有什么办法可以加快速度吗?

ss@dat0: /home/ss/dat0 fuse.sshfs defaults,_netdev,identityfile=/home/ss/.ssh/id_rsa,uid=1000,gid=1000,allow_other 0  0
Run Code Online (Sandbox Code Playgroud)

linux bash mount sshfs fstab

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