Commands from Remote Shell: rsh



next up previous contents index
Next: Remote Copy: rcp Up: Unix to Unix Previous: Remote Login: rlogin

Commands from Remote Shell: rsh

The remote shell command rsh allows you to execute a command on a remote machine without actually logging onto that machine. Beware that on some Unix System V machines, rsh is the name for the restricted shell, in which case you get a remote shell by issuing the rshell or rcmd commands. The command rsh uses the same .rhosts file as does rlogin, yet while rlogin will prompt you for a password if it has trouble with the .rhost file, both rsh and rcp require a properly functioning .rhosts file. If the .rhosts files is not properly configured, these commands will issue an error message and quit.           

In the example below, big brother bohr wants to find out if his students are working on phy1 (as they were told to), and so he runs the command who remotely on the machine phy1:

% rsh phy1 who   	Remote shell, computer name, command.   
pfink    console Mar 16 17:58   	   
ghe      ttyp0    Mar 16 17:58   (slip-serv)   	   

The remote shell runs in your home directory on the remote machine - just the same as when you log in at home. To execute a command that is not in your home directory, you must either give the path name relative to your home directory or issue the cd command to change the directory to it.

% rsh phy1 pwd   	Run pwd on phy1.   
/u/bohr   	In bohr's home directory with rsh.   

Now bohr uses rsh to explore his home directory on phy1:

% rsh phy1 ls -CF   	List in columns for remote phy1.   
Mail/    bin/   	   
News/    proj/   	   
% rsh phy1 ls -CF proj   	Look at the directory proj.   
bin/     src/   	   
runs/   	   
   	Note path is relative to home directory.   
% rsh phy1 ls -CF proj/bin   	Now look at remote subdirectory.   
calcL*     bigjob*   	   
% rsh phy1 ls -CF /u/bohr/proj/bin   	Use full path name   
   	to get to the same directory.   
calcL*     bigjob*   	   

Now bohr wants to run one of his programs on phy1. To do this, he has to change directory and then run his runs command. While the change directory command cd and bohr's program runs are separate commands, they must be concatenated as a single command for rsh to execute. To do this, separate the commands with a semicolon (the standard Unix procedure to run two commands sequentially) and surround all of the commands with quotes:

% rsh phy1 "cd proj/runs; /u/bohr/proj/bin/calcL"   	   

Or, you can ``escape'' the semicolon by placing a \ directly before it:

% rsh phy1 cd proj/runs \ /u/bohr/proj/bin/calcL   	   

The \ tells the shell not to place any special meaning on the next character and instead to just pass it along. In either case the remote shell gets the semicolon and interprets it as a command separator.

To really make use of someone else's resources, we may also need to include I/O redirection in our remote commands. In this example bohr runs a remote command with standard input from the file data.in, a file also located in the runs directory on the remote machine. Since we again need to concatenate several commands, the whole mess is enclosed in quotes:

% rsh phy1 "cd proj/runs; /u/bohr/proj/bin/job < data.in"   	   

For another level of complication we can take the input file from our local machine while running the command remotely:

% ls   	Local list.   
ch4.tex    ch4.div    ch4.ps   	What's on theo.   
% rsh phy1 lp -dps < ch4.ps   	Use local ch4.ps as input for the remote command.   

Here we have printed a local file on a remote machine by running the lp -dps command on the remote machine with a redirected input from the local file ch4.ps.gif

The same methods work for output as well as input. Here bohr runs the program remotely and directs the output to a local file:

% rsh phy1 /u/bohr/proj/bin/calcL > run1.out   	   

In case you have different names on different machines, the rsh command accepts the same -l options as does rlogin. So when bohr wants to run commands on phy2, he gives the -l option to tell phy2 his login name is niels, not bohr:

% rsh phy2 -l niels who   	Remote command with different user id.  



next up previous contents index
Next: Remote Copy: rcp Up: Unix to Unix Previous: Remote Login: rlogin