Expect 不在屏幕上执行脚本
Expect doesn't execute script in screen
我试图在 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
- Bash 4.2.37
- 屏幕 4.01.00devel
版本主机:
- Debian 扩展
- Bash 4.4.12(1)-发布
- 屏幕版本 4.05.0
- 预计 5.45
好吧,看来要等命令执行完退出终端了。否则我认为 expect 太快了。
send "screen -dm bash -c './${CLIENT_SCRIPT_LOG}'\r"
expect "*# " { send "exit\r" }
exit 0
我试图在 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
- Bash 4.2.37
- 屏幕 4.01.00devel
版本主机:
- Debian 扩展
- Bash 4.4.12(1)-发布
- 屏幕版本 4.05.0
- 预计 5.45
好吧,看来要等命令执行完退出终端了。否则我认为 expect 太快了。
send "screen -dm bash -c './${CLIENT_SCRIPT_LOG}'\r"
expect "*# " { send "exit\r" }
exit 0