我正在编写一个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脚本才能解决。
答案 0 :(得分:2)
在结束标记周围使用单引号,以便扩展不会在当前shell中发生但在远程
中ssh localadmin@10.101.30.61 &>/dev/null << 'EOF'
kill $(pidof tshark)
EOF
比较
cat << EOF
$$
EOF
和
cat << 'EOF'
$$
EOF