COHERENT manpages

This page displays the COHERENT manpage for uux [Execute a command on a remote system].

List of available manpages
Index


uux -- Command

Execute a command on a remote system
uux [-a user] [-rnpz] command-string

The command  uux spools  command-string for  execution on a  remote system.
Usually, it is invoked by  software systems, in particular the mail system,
to request  that work be  performed on a  remote system.  However,  you can
also invoke uux by hand to execute a task on a remote system.

For  security  reasons, you  can  execute  on the  remote  system only  the
commands  that the  remote system permits  explicitly.  These  commands are
named  in  the  entry for  your  system  in  the  remote system's  copy  of
/usr/lib/uucp/sys.

If all permissions  are in order, uux creates a  file with the prefix X. in
the remote system's  directory /usr/spool/uucp/yoursystem, where yoursystem
is the  name by which  the remote system  knows your system.   This file is
then executed by the remote system's copy of the command uuxqt.

command-string  consists  of  a  command  name  followed by  zero  or  more
arguments.  Both the command's name and  the arguments may be prefixed by a
system  name (sitename)  and an  exclamation mark.   Note that  all special
characters must  be escaped or  enclosed in quotation marks  to avoid being
processed by your system's shell.

For example, the simplest form of the uux command is:

    uux host!command arg0 ... argN

where host is the name of  the remote system being contacted, as defined in
file /usr/lib/uucp/sys,  command is the  name of the command  to execute on
the remote system, and arg0 through argN are the arguments to command.

If an argument names a file,  that file can reside on the remote system, on
your system, or on some third system.  For example, the command

    uux widget!lp /usr/sally/herfile

asks site  widget to  print its own  file /usr/sally/herfile. On  the other
hand, the command

    uux widget!lp !$HOME/myfile

requests that  site widget print on  its line printer the  file myfile from
your home directory  on your home system.  Note that  the `!' that prefixes
myfile is shorthand for the name of your system.  Finally, the command

    uux widget!lp lepanto!/usr/fred/hisfile

requests that system  widget print file /usr/fred/hisfile, which resides on
the  third site  lepanto.  If widget  does  not know  how  to contact  site
lepanto, the command fails.

If you wish, you can embed  the shell operators `<', `>', `;', or `|'
within a uux command.  This lets you construct a more powerful command than
you  could do  otherwise.  Commands  that contain  these operators  must be
quoted, to  ensure that your  shell does not interpret  them.  For example,
the command

    uux "widget!pr /usr/sally/herfile > lepanto!~/fred/hisfile"

tells uux  to use pr to  format its file /usr/sally/herfile,  and write the
output into file  /usr/spool/uucppublic/fred/hisfile on site lepanto. (Note
that the tilde  `~', as always, is a synonym  for the home directory of the
user that is executing the command; and a uux command is always executed by
user uucp whose home directory is always /usr/spool/uucppublic.) Again, the
command fails  if you do not  have appropriate permissions on  widget or if
widget does not have appropriate permissions on lepanto.

The operator  `-' lets you use  the standard input when  constructing a uux
command.  For example, the command

    who | uux - widget!lp

executes the who command on your system, pipes the output to uux, and tells
uux to invoke  the command lp on remote system  widget to print the list of
users on your system.

uux attempts to transfer any needed  input files to the system that will be
executing  the requested  command.   You must  enclose  in parentheses  any
output files  generated by command,  to distinguish them from  the names of
input file.

Command-line Options

uux recognizes the following options:

-a address
     Report the status of the job to address.

-C   Copy local files to the spool directory.

-c   Do not copy local files to  the spool directory.  This is the default.
     If  the files  are removed  from their  local directory  before uucico
     processes them,  the copy  fails.  The files  must be readable  by the
     uucico as well as the by the user who invokes uux.

-g grade
     Set the  grade of the file-transfer command.  grade  is a single ASCII
     character, from  `0' to `z'; the  lower the ASCII value  of grade, the
     more important the files.

-I file
     Read configuration  information from file instead  of from the default
     file /usr/lib/uucp/sys.

-j   Print  job identifiers  on  the standard  output.  uux  creates a  job
     identifier  for each  file-copying operation  required to  perform the
     operation.  To  cancel the copying of a file,  pass the job identifier
     to the uustat with its option -k.

-l   Link local files into the spool directory.  If a file cannot be linked
     because it is on a different device, it is copied unless the -c option
     also appears (in  other words, use of -l switches  the default from -c
     to -C).  If the  files are changed  before uucico processes  them, the
     changed  versions will  be used.   The files must  be readable  by the
     uucico as well as by the user who invoked uux.

-n   Do not  send mail about  the status of  a job, even if  it fails.  The
     default is to send mail to the requester should the command fail.

-
-p   Read the standard-input device and  pipe what is read into the command
     to be executed.

-r   Queue  the  uux  request but  do  not  invoke  uucico  to perform  the
     transfer.  The default is to initiate uucico.

-x event
     Log each  event in  the execution  of uux, where  event is one  of the
     following values: abnormal,  config, spooldir, or execute. A -x option
     can hold multiple events, each  separated by commas; and a uux command
     line can hold more than -x option.

-z   Notify requester should command-string fail.

Examples

The following script  prints files on a remote system.   The files named on
the  command line  are sent  unprocessed  to system  prnsrvr to  be printed
through that  system's version of  command lp. Option  -r tells uux  not to
invoke  uucico immediately,  but  merely spool  the  request for  execution
later.

    for i in $*
    do
        uux -r prnsrvr!lp !$i
    done

Please note  that the `!'  that prefixes string ``!$i''  indicates that the
file to be printed resides in the current directory on your home system.

The next  example copies file  /foo from system  george and file  /bar from
system norm  to your system and  then invokes command cmp  to compare their
contents.    It  writes   the   results  of   the   comparison  into   file
/tmp/cmp.results on your local system:

    uux -z "!cmp -l george!/foo norm!/bar >/tmp/cmp.results"

This command assumes that your system can talk to both george and norm, and
that your system has permission to read file /foo on system george and file
/bar  on system norm.  Option -z  tells uux  to send you  mail when  it has
successfully completed the job.

The  last example  compiles file  mycode.c on  system cserver.  The command
redirects all  of the  compiler's error  messages into file  /tmp/errors on
your local system:

    uux 'cserver!cc -O -o (!mycode) !mycode.c > !/tmp/errors'

Note  that  the  name  of  the  output  file  !mycode  is  enclosed  within
parentheses.  This is to protect the  `!' from being interpreted by uux; it
will be interpreted by uuxqt on the remote system.

See Also

commands,
UUCP,
uuxqt

Notes

You cannot pipe  the output from a command on  one system into a command on
another.  If  command-line consists of several  commands that are connected
by pipe characters `|', only the first can be prefixed by a system name and
`!'; every other command within the pipeline will be executed on the system
named by the first command.  For example, consider the command:

    uux "mwc!wrap -w80 -t4 < !myfile.c | prps | lp"

This  command  passes file  myfile.c  from the  current  directory on  your
current system to command wrap on system mwc for processing; then pipes the
output of wrap into prps  on system mwc for transformation into PostScript;
and  then pipes  the  output of  prps  into lp,  again on  system mwc,  for
printing.  If you embed a `!' within the subsequent commands of a pipeline,
uux  will   expand  it  into  something   quite  unexpected  (and  probably
unwelcome).

It is not a good idea to use the metacharacter `*' within command-line. The
odds that it will be expanded into what you want are very small.

Every  command  that  you spool  with  uux  is  executed  within a  special
execution directory on  the remote system.  (Under COHERENT, this directory
is  /usr/spool/uucp/.Xqtdir;  it  may vary  on  other  systems.) Before  it
executes the  command, UUCP  copies into  that special directory  each file
that  the command  names, unless  that file already  resides on  the system
within which  the command  is being executed.   For this reason,  each file
named in  a uux command must  be unique, regardless of  its full path name.
For example, the following command will not work:

    uux  "marian!diff fred!/x/testfile ivan!/y/testfile > !xyz.diff"

It fails because uux (or, to  be more accurate, uuxqt) copies file testfile
from  system fred  into its  execution directory,  then copy  testfile from
system ivan into the test directory.  The second copied testfile overwrites
the first, and thus the command diff fails.

uux was written by Ian Lance Taylor (ian@airs.com).