I created a script to get in inside an Access Point (AP) using ssh
and execute some commands and I used expect
to interact with shell.
The scripts works fine when it is running on foreground, but when I try to execute the same script in background using &
to fork the process, it stop at spawn ssh
command at ap_commands
script below.
Trying to execute:
$ run_ap &
Bash script (run_ap
) to call the expect script:
#!/bin/sh while(true); do /script/ap_commands done
Tcl and expect script (ap_commands
):
#!/usr/bin/expect eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no user@192.168.92.1 #use correct prompt set prompt ":|#|\>" set user ">" interact -o -nobuffer -re "Password:" return send "pass12345r"
Update 1 – Solution
Thanks to Donal Fellows, I solved using the screen command who it creates a new terminal and execute the script in foreground.
screen -dm bash ./run_ap
and I add -f
arguments to expect
, to force to run in foreground:
#!/usr/bin/expect -f
Advertisement
Answer
The interact
command will not work with a backgrounded script, since it explicitly expects to interact with the user (as well as the spawn
ed subprocess); when the interact
happens, if the process isn’t in the foreground, the OS gives it a signal (SIGTSTP) that makes stop and wait for the user to make it a foreground process. This is usual Unix terminal handling.
If you want to use backgrounding, you need to stick to expect
ing things.