1.3.6 Shell commands, removing and renaming files
Yorick has a system function which you can use to invoke
operating system utilities. For example, typing ls *.txt to a
UNIX shell will list all files in your current working directory
ending with `.txt'. Similarly, pwd prints the name of your
> system, "pwd"
> system, "ls *.txt"
This is so useful that there is a special escape syntax which
automatically generates the system call, so you don't need to type the
name system or all of the punctuation. The rule is, that if the
first character of a Yorick statement is $ (dollar), the
remainder of that line becomes a quoted string which is passed to the
system function. Hence, you really would have typed:
> $ls *.txt
Note that you cannot use ; to stack $ escaped lines ---
the semicolon will be passed to system. Obviously, this syntax
breaks all of the ordinary rules of Yorick's grammar.
On UNIX systems, the system function (which calls the ANSI C
standard library function of the same name) usually executes your
command in a Bourne shell. If you are used to a different shell, you
might be surprised at some of the results. If you have some
complicated shell commands for which you need, say, the C-shell
csh, just start a copy of that shell before you issue your
% ls *.txt
As this example shows, you can start up an interactive program with
the system function. When you exit that program, you return to
One system command which you cannot use is cd (or pushd or
popd) to change directories. The working directory of the shell
you start under Yorick will change, but the change has no effect on
Yorick's own working directory. Instead, use Yorick's own cd
> cd, "new/working/directory"
Also, if you write a Yorick program which manipulates temporary files,
you should not use the UNIX commands mv or rm to rename or
remove the files; any time you use the system command you are
restricting your program to a particular class of operating systems.
Instead, use Yorick's rename and remove functions, which
will work under any operating system.