标签: bash

用于连接到数据库并执行查询的 Shell 脚本

#!bin/bash
Query="update table_name set colume ='i' where column_name is NOT NUll"

mysql -u username -p password mysql  <<EOF
$query;
EOF
Run Code Online (Sandbox Code Playgroud)

上面的脚本不起作用

shell bash

0
推荐指数
2
解决办法
2万
查看次数

基于当前目录的globbing

今天遇到了一些奇怪的行为。想知道这里是否有人可以告诉我什么是不同的行为。环境是 RHEL 6.7 服务器。

我运行以下命令:

yum list installed *mysql*

如果我的 cwd 是 / 或其他一些地方,我会得到以下输出:

Installed Packages MySQL-client-advanced.x86_64 5.6.27-1.el6 @/MySQL-client-advanced-5.6.27-1.el6.x86_64 MySQL-server-advanced.x86_64 5.6.27-1.el6 @/MySQL-server-advanced-5.6.27-1.el6.x86_64 MySQL-shared-advanced.x86_64 5.6.27-1.el6 @/MySQL-shared-advanced-5.6.27-1.el6.x86_64 MySQL-shared-compat-advanced.x86_64 5.6.27-1.el6 @/MySQL-shared-compat-advanced-5.6.27-1.el6.x86_64

在其他几个文件夹(包括此服务器上的 /opt)中,我运行相同的命令并获得以下输出:

Error: No matching Packages to list

现在我知道我通常需要在这个命令中转义通配符。如果我运行它:

yum list installed \*mysql\*

然后我在两个位置都得到了正确的输出。我认为这是因为 bash globs 通配符的方式。我现在真正想知道的是为什么它把它放在一个文件夹中,但不在另一个文件夹中。我都以 root 身份运行,printenv 显示相同的输出(PWD 除外),实际上,两次运行命令之间唯一变化的是cd /opt

谁能告诉我为什么会发生这种情况,或者要查看哪些内容以了解为什么会有所不同?TIA

linux bash yum wildcard rhel6

0
推荐指数
1
解决办法
37
查看次数

当我不小心输入了 reboot -f 时,如何恢复 bash 历史记录

设想 :

在我的 Linux 服务器 [CentOS 7] 上工作后,我reboot -f在我的终端中输入, 重新启动后是否可以检索我的bash 历史记录

我知道这reboot -f会强制重启机器。这类似于按下 CPU 的电源按钮。不发生关机。系统将立即重置。

根据手册页:

当使用 --force 或运行级别 0 或 6 调用时,此工具会调用 reboot(2) 系统调用本身(传递 REBOOTCOMMAND 参数)并直接重新启动系统。否则,这只是使用适当的参数调用 shutdown(8) 工具而不传递 REBOOTCOMMAND 参数。

现在我的问题是:是否可以在之后检索 bash 历史记录reboot -f

linux bash history centos7

0
推荐指数
1
解决办法
3507
查看次数

sed 在 XXX 之后的第一个空行上插入行

我正在使用 bash 脚本以交互方式编辑我的主机文件。我需要在我的主机文件中插入一行。该行需要插入特定注释后的第一个空行。我插入的内容在一个变量中。

这是我尝试过的(之前设置了 $NEWLINE):

sed -i '# Insert New DNS / Virtualbox/$NEWLINE/g' /etc/hosts

我没有收到错误,但没有写入该行。有什么建议吗?

bash sed

0
推荐指数
1
解决办法
2674
查看次数

如何在 bash 中使用“nohup”和“&amp;”正确以另一个用户身份运行程序

在过去的几个月里,我一直在学习 bash 和 linux 管理,同时生成越来越多需要在后台运行的代码。理想情况下,我希望将我的开发系统运行在离生产环境更近的地方,以避免由于安全和权限问题而不得不重新开发代码。

一般来说,我会运行一些东西:

$nohup <program> <program args> >> <program logfile> 2>&1 &
Run Code Online (Sandbox Code Playgroud)

IE:

$nohup ping 192.168.0.1 >> ping.log 2>&1 &
Run Code Online (Sandbox Code Playgroud)

但是,今天我尝试通过创建一个用户并授予他们正确的权限来正确设置它,以便只能访问他们自己的文件而不能访问其他任何内容。这似乎是一种明智的安全做法。

我会这样做:

$sudo -u <program user> nohup <program> <program args> >> <program logfile> 2>&1 &
Run Code Online (Sandbox Code Playgroud)

但是,当我运行时,这会导致以下输出ps aux | grep <program>

<admin user>@server:~$ ps aux | grep <program>
root      1396  0.0  0.0  61868  3792 pts/38   S    10:50   0:00 sudo -u <program user> nohup <program> <program args>
<program user>  1397  0.0  0.8 1273232 68308 pts/38 …
Run Code Online (Sandbox Code Playgroud)

linux bash nohup background-process

0
推荐指数
1
解决办法
3871
查看次数

用于运行 ssh-agent 的 shell 脚本

美好的一天,我一整天都在阅读类似的主题,但不幸的是找不到适合我情况的答案。所以这就是我想要做的。我有很多函数的 shell 脚本,其中一个函数假设调用 ssh-agent:

sh_agent_run () {
 case "$(pidof ssh-agent | wc -w)" in
  0)  echo "SSH agent is not running. Startting SSH agent."
      eval `ssh-agent -s`
      ssh-add ${ssh_key}
      ;;
  1)  echo "SSH agent is running. Nothing to do."
      ;;
  *)  echo "Too much instances of SSH agent is running. Stopping SSH agent instances and running just one"
    while pidof ssh-agent; do
      echo "Stopping ssh-agent..."
      killall -9 ssh-agent
      sleep 1
    done
    echo "Starting valid SSH agent instance"
    eval `ssh-agent -s` …
Run Code Online (Sandbox Code Playgroud)

ssh shell bash ssh-agent

0
推荐指数
1
解决办法
1222
查看次数

运行完成后终止 watch 命令

watch在一个screen窗口中使用它来持续执行一个每两秒处理一次数据的 PHP 任务。因此,我可以在服务器运行的情况下注销它,并可以对其进行登记。我不想在中途停止任务,因为如果发生这种情况需要手动清理,但我希望能够重新启动服务器。有没有办法在运行之间停止监视并确保它没有启动任务的另一个副本?即像 ctrl+c 这样的东西,但如果任务在后台运行,它会等待。

或者,是否有其他一些工作流程可以实现这一点?我不能使用 cron 作业,因为它需要每两秒运行一次,但不能同时运行。

另请注意,脚本的一次运行需要 10 秒到 30 分钟,具体取决于数据对象的大小。(它每次运行处理一个对象。)这就是为什么在运行之间停止监视是非常不可能的......

unix bash

0
推荐指数
1
解决办法
555
查看次数

如果在 bash 中运行 zsh,为什么 $SHELL 指向 /bin/bash?

如果我在zsh里面bash(在 macOS Sierra 上)运行,为什么$SHELL仍然指向/bin/bash,而不是/bin/zsh

$ echo $SHELL
/bin/bash
$ zsh
% echo $SHELL
/bin/bash
Run Code Online (Sandbox Code Playgroud)

shell bash zsh environment-variables

0
推荐指数
1
解决办法
1554
查看次数

运行前完整的 bash 脚本检查

尝试在 bash 脚本中实现自语法检查,test.sh 以便在执行脚本之前运行语法检查。

error_exit()
{
        echo -e "$1" 1>&2
        exit 1
}
bash -n "$(basename $BASH_SOURCE)"
RESULT=$?
if [ $RESULT == 0 ]; then
  echo "[OK] Test pass"
else
  error_exit "Something is not right :( \n check the sytntax"
fi
starting-script
Run Code Online (Sandbox Code Playgroud)

bash -n,bash -x如果有一些严重的语法错误但小错误如:

echo "somthing" && sleep5&&
./test.sh: line 14: sleep5: command not found
Run Code Online (Sandbox Code Playgroud)

被忽略...

有什么方法可以处理完整的语法检查,并且可以在某种“沙箱模式”/“模拟模式”下运行脚本以捕获所有可能的错误,并返回错误(如果有)?

编辑 在脚本必须将脚本的某些部分复制到远程服务器的情况下,例如在数百个从属(受监控服务器)上安装 nagios 的脚本等。不幸的是,文本复制并不总是顺利进行,错误可能是由自动将脚本复制为文本时发生错误,如果检测到任何错误,请务必检查并结束脚本。

linux bash syntax

0
推荐指数
1
解决办法
295
查看次数

bash 管道是懒惰还是渴望?

我正在看着这个命令运行

tar cf - 20180412 -P | pv -s $(du -sb 20180412 | awk '{print $1}') | gzip > 20180412.tar.gz
9.02GiB 0:01:20 [ 114MiB/s] [===================================================================================================================================================================>] 100%
Run Code Online (Sandbox Code Playgroud)

并想知道如何pv工作。我认为管道是急切的,但我认为这pv只有在管道懒惰的情况下才能正常工作。

那么,bash 管道是懒惰还是渴望?

bash pipe

0
推荐指数
1
解决办法
223
查看次数