All Manuals > LispWorks User Guide and Reference Manual > 40 The SYSTEM Package






call-system command &key current-directory wait shell-type => status



A string, a list of strings, a simple-vector of strings, or nil .


A string. Implemented only on Microsoft Windows.


A boolean.


A string or nil .



The exit status of the invoked shell or process.


call-system allows executables and DOS or Unix shell commands to be called from Lisp code. The output goes to standard output, as the operating system sees it. (This normally means *terminal-io* in LispWorks.)

If command is a string then it is passed to the shell as the command to run without any other arguments. The type of shell to run is determined by shell-type as described below.

If command is a list then it becomes the argv of a command to run directly, without invoking a shell. The first element is the command to run directly and the other elements are passed as arguments on the command line (that is, element 0 has its name in argv[0] in C, and so on).

If command is a simple vector of strings, the element at index 0 is the command to run directly, without invoking a shell. The other elements are the complete set of arguments seen by the command (that is, element 1 becomes argv[0] in C, and so on).

If command is nil , then the shell is run.

On Microsoft Windows, if command is a string, LispWorks hides the first window of the execution of the command, because that is the console that cmd.exe starts in a DOS window. If the command itself is a console application, you may want to see the console. In this case run the command as a direct command. To do this, pass a list or a vector as described above. Conversely, if you run a console application and do not want to see the console, pass the command as a string.

On Microsoft Windows current-directory is the lpCurrentDirectory argument passed to CreateProcess . If this is not supplied, the pathname-location of the current-pathname is passed.

If wait is true, call-system does not return until the process has exited. The default for wait is t .

On Unix/Linux/Mac OS X/FreeBSD, if shell-type is a string it specifies the shell. If shell-type is nil (the default) then the Bourne shell, /bin/sh , is used. The C shell may be obtained by passing "/bin/csh" .

On Microsoft Windows if shell-type is nil then cmd.exe is used on Windows 7, Windows Vista, Windows XP and Windows 2000 and on Windows 98 and Windows ME.

call-system returns the exit status of the shell invoked to execute the command on Unix/Linux/Mac OS X, or the process created on Microsoft Windows.

Compatibility note

The argument :shell-type is not implemented in LispWorks for Windows 4.4 and earlier, and cmd.exe is not used implicitly.

On Microsoft Windows, LispWorks 5.0 and later use shell-type cmd.exe (or ) by default when command is a string. In LispWorks 5.x the user may see a DOS command window in this case, but LispWorks 6.0 and later explictly hide the DOS window. To call your command directly command should be a list, as in the last example below.


On Unix:

(call-system (format nil "adb ~a < ~a > ~a"
                (namestring   a)
                (namestring   b)
                (namestring   c)))

On Microsoft Windows:

(sys:call-system "sleep 3" :wait t)
(sys:call-system '("notepad" "myfile.txt"))
See also


LispWorks User Guide and Reference Manual - 21 Dec 2011