我正在尝试使用screen
在expect
到ssh
中执行脚本,但从未执行过。我知道这一点是因为我没有看到与screen
进行的screen -list
会话。Expect
s的退出代码为0。如果我通过SSH手动执行命令,则该命令有效。
我在做什么错? (也欢迎实现我的目标的其他方式)。
脚本:
#! /bin/bash
expect -d <<-EOF
set timeout -1
spawn ssh ${user}@${host}
expect {
"yes/no" { send "yes\r"; exp_continue }
"password: " { send "${pass}\r" }
}
expect "*# "
send "screen -dm bash -c './${CLIENT_SCRIPT_LOG}'\r"
exit 0
EOF
exit $?
调试输出:
[.. cut ..]
expect: set expect_out(buffer) "\r\nLinux client 4.9.76-Rxx-rt61-gb7ccafd-dirty #1 SMP PREEMPT RT Wed Apr 1 13:14:00 CEST 2020 armv7l\r\n\r\nThe programs included with the Debian GLinux system are free software;\r\nthe exact distribution terms for each program are described in the\r\nindividual files in /usr/share/doc/*/copyright.\r\n\r\nDebian GNU/Linux cs with ABSOLUTELY NO WARRANTY, to the extent\r\npermitted by applicable law.\r\nLast login: Thu Jan 1 05:29:03 1970 from 192.168.138.2\r\r\nroot@client:~# "
send: sending "screen -dm bash -c './log.sh'\r" to { exp5 }
版本客户端:-Debian Wheezy-重击4.2.37-屏幕4.01.00 [开发]
版本主持人:-Debian拉伸-Bash 4.4.12(1)-发布-屏幕版本4.05.0-预期5.45
好吧,看来我必须等到命令执行后才能退出终端。我认为期望太快了。
send "screen -dm bash -c './${CLIENT_SCRIPT_LOG}'\r"
expect "*# " { send "exit\r" }
exit 0