Node:Running programs, Next:, Previous:System interface, Up:System interface



Running programs

To run a program, do: run program args. The program (which is quoted) must name an executable file. The args (which are also quoted) are passed to the program.

Q1> run wc Q.C
     308     950    7986 Q.C
If the program is a simple identifier that is not in the scope of a Q variable, and the identifier names an executable file in the current search path, then the run may be omitted.
Q2> wc Q.C
     308     950    7986 Q.C
(Note that determination that program is an executable program is done at compile time, so you cannot omit run if the program hasn't been created yet.)

The standard output from run is coerced to a string, which you can use as you use any other string:

Q3> :X = wc Q.C
Q4> printf "{%#a}" X
{"     308     950    7986 Q.C\n"}

The left-hand argument to a run command is coerced to a string, and the result is used as the standard input of the program:

Q5> "Hello World!\n" run /usr/bin/tr a-zA-Z A-Za-z
hELLO wORLD!

If an argument contains the "globbing" characters *?[]()| these are use to match against file names, as in most shells:

Q1> echo Makefi*
Makefile Makefile~
(echo is a builtin command that just prints into arguments.) The globbing syntax is an extension of that used for most shells; see Patterns for details.

Tilde expansion is also done.

Q1> "ab cde fgh" run wc
       0       3      10

To replace Q by program, do: exec program args.

By the way, before execution Q translates run program args into something very much like: primitive_run "program" (globlist (quote args)). (However, you can't call invoke primitive_run directly.)