无法在Bash脚本中终止由另一个SSH会话启动的进程。

3
我正在编写一个bash脚本,需要通过ssh登录远程机器,启动一个进程,结束ssh会话,做一些其他的事情,然后再次通过ssh登录并杀死进程。但是进程无法被杀死。我尝试了很多种方式。这是无法工作的脚本部分:
ssh localadmin@10.101.30.61 &>/dev/null << EOF
tshark -i ens160 -w /home/localadmin/dns_traffic_61.pcap &>/dev/null &
EOF


ssh localadmin@10.101.30.61 &>/dev/null << EOF
kill $(pidof tshark)
EOF

我还尝试将tshark命令放入脚本中,这样我可以像以下这样终止脚本:
ssh localadmin@10.101.30.61 &>/dev/null << EOF
sh tshark.sh &>/dev/null &
EOF

ssh localadmin@10.101.30.61 &>/dev/null << EOF
pid=$(ps -ef | grep tshark.sh | grep -v grep | awk '{print $2}')
kill $pid  
EOF

以及这个:

ps -ef | grep tshark.sh | grep -v grep | awk '{print $2}'|xargs kill

似乎什么都不起作用。

注意:当我手动通过ssh连接时,我可以杀死进程,只有bash脚本不能。

1个回答

2

使用单引号将结束标记括起来,这样扩展就不会在当前shell中发生,而是在远程shell中发生。

ssh localadmin@10.101.30.61 &>/dev/null << 'EOF'
kill $(pidof tshark)
EOF

比较
cat << EOF
$$
EOF

and

cat << 'EOF'
$$
EOF

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接