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 working directory:
> system, "pwd" /home/icf/munro > system, "ls *.txt" damped.txt junk.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:
> $pwd /home/icf/munro > $ls *.txt damped.txt junk.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 commands:
> $csh % ls *.txt damped.txt junk.txt % exit >
As this example shows, you can start up an interactive program with the system function. When you exit that program, you return to Yorick.
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 function:
> 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. Yorick also has mkdir, rmdir, lsdir, get_cwd, and get_env functions.