正如标题中所述,我正在编写一个应该在计算机 A 上运行的脚本。计算机 A 应该ssh
在计算机 B 上运行程序 B,然后退出会话ssh
(程序 B 仍在计算机 B 上运行),然后在计算机 A 上运行程序 A 。
我必须使用 Expect 并且必须使用 ssh 密码才能完成此操作。
这是我到目前为止的尝试(它不起作用):
#!/bin/bash
#checks to see if programA is already running
if pidof -x "programA" >/dev/null; then
echo "Program A already running"
exit 1
fi
spawn ssh username@{$1}
/usr/bin/expect "assword:"
send "password"
./programB & # run programB in the background
exit
./programA
这是应该终止两台计算机上的程序的脚本:
pkill programA
spawn ssh username@{$1}
/usr/bin/expect "assword:"
send "password"
pkill programB
exit
启动程序的脚本未按预期工作。它在计算机 A 上启动程序 A 和程序 B。我还注意到,我需要分离我的ssh
会话,否则当我在计算机 B 上退出它时,程序 B 将终止。
有人可以向我提供执行我想要的操作的脚本,并解释我出错的地方吗?
先感谢您。
答案1
看起来几乎没问题。尝试以下(显然未经测试)
#!/bin/bash
#checks to see if programA is already running
if pidof -x "programA" >/dev/null; then
echo "Program A already running"
exit 1
fi
expect <<EOF
spawn ssh username@${1}
expect "assword:"
send "password\r"
expect "$ "
send "nohup ./programB &\r" # run programB in the background
exit
EOF
./programA
编辑:关于 ssh username@{$1} 的地址评论