Expect 不在屏幕上执行脚本

Expect doesn't execute script in screen

我试图在 screenexpectssh 中执行脚本,但它从未执行过。我知道这一点是因为我没有看到 screenscreen -list 的会话。 Expects的退出代码是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