我正在编写一个脚本,使用 inf while 和 for 循环来获取远程计算机的命令信息。 PFB 脚本。但脚本仅以给出单个命令信息结束。我在这个文件中有多个命令(CMDS=$HOMEDIR/cmnd.txt)
。如果我不使用 ssh,所有命令都可以正常工作,但是当我使用 ssh 时,它只执行第一个命令。
#!/bin/bash
HOMEDIR=/home/448130
CMDS=$HOMEDIR/cmnd.txt
while read -r line
do
for i in $(cat hostname.txt);
do
echo "***************************** $line output begins ********************************";
#echo $line
ssh $i $line
echo "***************************** $line output ends ********************************";
done
done < $CMDS
请帮我解决这个问题。
答案1
当您运行时ssh
,标准输入将传递给远程命令。远程命令实际上并没有对其执行任何操作,但本地ssh
进程无法知道。为了避免这种情况,由于您不想将任何输入传递给远程命令,因此请将输入重定向ssh
到/dev/null
。
别忘了双引号变量替换。
而 IFS= 读取 -r 行 做 for i in $(cat hostname.txt); 做 echo "***************************** $行输出开始**************** *****************”; #回声$行 ssh“$i”“$line”</dev/空 echo "***************************** $行输出结束**************** *****************”; 完毕 完成<“$CMDS”