Expect return code

 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Expect return code
# 1  
Old 02-16-2018
Expect return code

Hello everyone
Can some help me with understand return code in expect
Code:
#!/usr/bin/expect

set timeout  1

set SRV [lindex $argv 0]
set user [lindex $argv 1]
set pw [lindex $argv 2]

spawn ssh $user@$SRV
expect {
        "(yes/no)? " { send "yes\r" ; exp_continue }
        "assword: " { send "$pw\r" ; exp_continue }
        eof
}

expect "$ "
send "sudo su - root\r"
expect "word:"
send "$pw\r"
expect "# "
send "ps -ef | grep -i sendmail | grep -v grep\r"
expect "# "
set retcode $?

if { $retcode != 0} {
    puts "False : $retcode\n";
} else {
    puts "Success : $retcode\n";
}

exit

I wrote this code to check if sendmail is running, but part with return code is not working.
# 2  
Old 02-16-2018
Hi,

I think the problem here (though I'm far from an expect expert, or indeed a regular user of it) is that the $? variable is a bash feature, and not an expect one. That's not how you capture exit values in expect.

So what's actually happening here is that your variable retcode is becoming equal to, quite literally, the string $?. And that's why your comparison fails later on.

I believe to capture exit values in expect you have to use the wait command to hang about and wait for your sent command to exit, and to capture information relating to how it exited, including among other things its exit value. You could then do a comparison on the information obtained by wait (the fourth value returned by it is I believe the exit value of the last process executed) and do your check that way.

Hope this helps.
# 3  
Old 02-16-2018
I would politely suggest that expect is not the solution to your problem. If you are trying to automate login or sudo use, you should use the correct tools. For login with ssh, use SSH-keys. For sudo use, write the appropriate sudo rules that do not require a password.

You are probably over-complicating things by assuming that tools must talk to a user and that expect is your way to pretend to be that user.


The ps command should not need super-user privilege to run. What are you actually trying to achieve?




Kind regards,
Robin
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Expect in bash to get the return value

cat test.sh #!/bin/sh expect <<- EOF set timeout 5 spawn ssh -o StrictHostKeyChecking=no lyang0@128.224.178.245 -C mkdir -p /tmp expect { "Password:" {send "root\r"} } spawn scp -o StrictHostKeyChecking=no /tmp/1 lyang0@128.224.178.245:/tmp/ ... (1 Reply)
Discussion started by: yanglei_fage
1 Replies

2. Shell Programming and Scripting

How to return value from expect script?

Hi there. There is a shell script: #!/bin/bash ARGS=`(grep -i $1 old.txt || grep -i $1 new.txt) |awk 'BEGIN {FS=","}{print "\x27" $5 "\x27"}' | tr "\n" " "` /usr/bin/expect -- << EXPECTEND spawn -noecho myssh myhost.localnet log_user 0 expect root log_user 1 send "/home/one.pl... (4 Replies)
Discussion started by: urello
4 Replies

3. Shell Programming and Scripting

How could I use the value of return code

Hello, I am woring on a script where I am getting strange situation.This script actually fetch the source code and tar that code and send to NAS location.This code resides in MKS tool...and we are fetching the source code on checkpoint label basis and script is working fine.First it synch the... (0 Replies)
Discussion started by: anuragpgtgerman
0 Replies

4. Shell Programming and Scripting

Getting error return code

I need to try and get the error return code from the tar command when being used as follows: tar tvf tarfile 2>logfile | tee -f outputfile ErrorStat="$?" I would like to save the error return code from the tar command in a variable, howver, the example above it is saving the 'tee' error... (7 Replies)
Discussion started by: nck
7 Replies

5. Shell Programming and Scripting

return code help

Hello folks, I have a question that if i type ls command and type echo $? it always show "0", how i could do this change that when i type ls it will show me 1, actually i want to change the return code of commands from 0 to 1. Thanks Bash (5 Replies)
Discussion started by: learnbash
5 Replies

6. Shell Programming and Scripting

Need help with return code 1...

Hi Guys,, I am having a unix script which is running the DB2 Insert command. For the insert command, there were no records to be updated. SQL0100W No row was found for FETCH, UPDATE or DELETE; or the result of a query is an empty table. SQLSTATE=02000 + + echo 1 STAGE_RC=1 + ] ... (6 Replies)
Discussion started by: mac4rfree
6 Replies

7. UNIX for Dummies Questions & Answers

to pick up the Return Code ( RC) from the mailx command and return it to SAS uisng 's

Hi All, Can anyone please let me know the syntax / how to pick up the Return Code ( RC) from the mailx command and return it to SAS uisng 'system()' function and '${?}'. I am in a process to send the mail automatically with an attachment to bulk users. I have used 'Mailx' and 'Unencode'... (0 Replies)
Discussion started by: manas6
0 Replies

8. Shell Programming and Scripting

asking about return code

hi all my system is linux red hat i have a script that runs some object . the object return some code to the system i see the code by writing echo $? i want to ask in the script if $? equals 14 how shell is do that in the script thanks (3 Replies)
Discussion started by: naamas03
3 Replies

9. Shell Programming and Scripting

how to get error return code

I have a unix AIX script that ftps some files (mput, mget). How can I check (in the script) to see if the ftp failed? After the ftp I move the files out of the directory but do not want to move files that have not been sent. The script will run as a cron job. (2 Replies)
Discussion started by: rayg50
2 Replies

10. UNIX for Advanced & Expert Users

Return code from PL/SQL Code

Hi Guys, I was just wondering if anybody can help me with this problem. OK, how we can get a value back from PL/SQL Script (not stored procedure/function) See the below example: (for example aaa.sh) #!/bin/ksh VALUE=`sqlplus -s user/password@test_id <<EOF @xxx.sq EOF` echo $VALUE ... (7 Replies)
Discussion started by: Shaz
7 Replies
Login or Register to Ask a Question