简体   繁体   中英

how to use expect inside shell script

I have a bash+expect script which has to connect normal user, i want to read the specific file and store into the variable to be used after while that specific file in root user. How can i get the value ? My script is:

#!/bin/bash
set prompt ">>> "
set command ls /root/test1

expect << EOF
spawn su root
expect "password:"
send "rootroot\r"
expect "$prompt\r"
send "$command\r"
expect "$prompt\r"
expect -re "(.*)\r\n$prompt\r\n"
EOF

echo "$command"

 if [ ! -f "$command" ]; then

                echo "file is not exist"
else
                echo "file is exist"
            fi

whenever i'm execute my shell script it show following output:

ls: /root/: Permission denied

file is not exist

basically test is there but it is showing "file is not exist"

This question is very old but i hope someone gets help from this answer.

--> You should use #!/usr/bin/expect or #!/bin/expect to use expect properly, expect<<EOF might work but thats not conventional way to write script.

--> You script should end with EOF statement . Ex.

#!/usr/bin/expect << EOF
<some stuff you want to do>
EOF

--> Some basic thing about spawn . Whatever you write in spawn will execute but it will not have effect on entire script. Its not like environment variables.

In short, spawn will start new process and your command is not under spawn process. Ex.

#!/usr/bin/expect
spawn bash -c "su root '<your-cmd-as-root>'"
<some-expect-send-stuff-etc>

Now in your script, $command should be write inside spawn like i showed in above example.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM