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

by on February 5, 2006 · 6 comments· 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.



You should follow me on twitter here or grab rss feed to keep track of new changes.

Featured Articles:

{ 6 comments… read them below or add one }

1 Jafar March 23, 2008 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 ??

Reply

2 vivek March 23, 2008 at 9:53 am

Use ps and jobs commands

Reply

3 Greg Wells October 24, 2008 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”

Reply

4 vishal November 27, 2008 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???????????/

Reply

5 Olivier February 10, 2011 at 9:11 pm

There is an error in the article.
You have to wrap the command in quotes like this :
$ ssh user@ras.nixcraft.in ‘today ; echo $?’

Reply

6 Leonel May 19, 2011 at 7:35 am

Additional note:
After trying this one. i found out that if ssh cannot resolve the host, the exit status is 255.

Reply

Leave a Comment

You can use these HTML tags and attributes for your code and commands: <strong> <em> <ol> <li> <u> <ul> <blockquote> <pre> <a href="" title="">
What is 10 + 6 ?
Please leave these two fields as-is:
Solve the simple math so we know that you are a human and not a bot.



Previous post:

Next post: