How do I find the exit status of a remote command executed via ssh?

by nixcraft [Last updated: February 5, 2006]

After writing about "Execute Commands on Multiple Linux or UNIX Servers", I received couple of emails asking about "how to find out the exit status of a remote command executed via ssh command." Well I never ever used exit status of a remote command executed via ssh. However, here is simple way to find out exit status:

$ ssh user@ras.nixcraft.in date;echo $?

Sun Feb  5 19:01:01 IST 2006
0

First line is nothing but output of date command, zero (0) is exit status of date command. Try another command

$ ssh user@ras.nixcraft.in today;echo $?

bash: today: command not found
127

Please note that ssh exits with the exit status of the remote command or with 255 if an error occurred. For example:

$ ssh user@ras.nixcraft.in today
$ echo $?

bash: today: command not found
127

Since today is not a valid command bash exited with 127 exit code. However, you cannot use conditional control operator:

  • && : Execute command only if command returns an exit status of zero
  • || : Execute command only if command returns an exit status of non zero

So following command will never display Command failed message:

$ ssh root@192.168.1.16 today;echo $? || echo "Command failed"

What you can do is create a shell script wrapper that will execute a remote command and returns the status locally. So if you are using scripts then last line will be always using to determine the exit status of a remote command executed via ssh.

Want to read Linux tips and tricks, but don't have time to check our blog everyday? Subscribe to our daily email newsletter to make sure you don't miss a single tip/tricks. Subscribe to our weekly newsletter here!

{ 4 comments… read them below or add one }

1 Jafar 03.23.08 at 8:56 am

Suppose I put a job to run on remote server (in the background and logged. How can I check later whether the job is done or not.
Suppose if i know the Job ID ??

2 vivek 03.23.08 at 9:53 am

Use ps and jobs commands

3 Greg Wells 10.24.08 at 7:33 pm

You can use conditional control operators if you omit the echo $? command. The conditional operator evaluates the exit status from the echo $? command which should always be 0.

This version should work:

$ ssh root@192.168.1.16 today || echo “Command failed”

4 vishal 11.27.08 at 3:13 pm

I am using remsh to execute remote command.
How to obtain exit status of remotely executed command .In remote program i am using exit(number) to differinciate b/w exit status.But all time i get exit status as 0.
Even if i use abort() the exit status is 0.
SOme one help???????????/

Leave a Comment

You can use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Previous post: Shell Scripting: Creating report/log file names with date in filename

Next post: Free Solaris 10 DVD-Rom Media kit giveaways