【问题标题】:Bash Script: For each item in column 1, do something with the item in column 2 [duplicate]Bash 脚本:对于第 1 列中的每个项目,对第 2 列中的项目执行某些操作 [重复]
【发布时间】:2021-04-01 18:41:40
【问题描述】:

我正在编写一个读取文件的 bash 脚本,并且对于第 1 列中的每个项目,在 2 列文件上运行一个命令。它需要 ssh 进入每个主机名(第 1 列)并终止一个 PID(第 2 列中的 PID #)。这是我正在尝试的代码,它不起作用(注意:此示例不运行 kill 命令,而是要求脚本对 PID 进行 ps):

while read host pid; do
        /usr/bin/sshpass -f ~/.pw /usr/bin/ssh -q  -o "StrictHostKeyChecking=no" -o ConnectTimeout=5 $host ps -ef| egrep -e $pid
done < $UNIQ_FILE

$UNIQ_FILE 的格式如下:

192.168.22.199  55829
192.168.22.142  662
...

脚本正在运行文件第一行的命令,然后退出。

【问题讨论】:

标签: bash loops


【解决方案1】:

您需要在 ssh 命令中使用 -n 选项

-n 从 /dev/null 重定向标准输入(实际上,阻止从标准输入读取)。 ssh时必须使用这个 在后台运行。一个常见的技巧是使用它在远程机器上运行 X11 程序。 例如, ssh -n shadows.cs.hut.fi emacs & 将在 shadows.cs.hut.fi 和 X11 上启动一个 emacs 连接将通过加密通道自动转发。 ssh 程序将被放置 在后台。 (如果 ssh 需要输入密码或密码,这将不起作用;另请参阅 -f 选项。)

while read host pid; do /usr/bin/sshpass -f ~/.pw /usr/bin/ssh -n -q -o "StrictHostKeyChecking=no" -o ConnectTimeout=5 $host ps -ef| egrep -e $pid done < $UNIQ_FILE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多