The system Command
The system command is similar to the exec command. But unlike the exec command, system runs UNIX commands without redirecting either of the standard output or standard error.
In early releases of Tcl, there was no support for running programs without unredirected I/O. Now it is possible, yet the system command remains—partly for historical reasons and partly because the interface is simpler than exec for a few common problems.
For example, if the script needs to allow a program such as more to directly interact with a user, this is accomplished slightly more easily with system. Compare:
system more file exec more file >@ stdout 2>@ stderr
The system command is also much more efficient than exec. If you are executing many fast UNIX commands (e.g., renaming or removing lots of files via mv or rm), the system-based approach will operate more quickly. On the other hand, if you are executing long-running commands or just a few commands, the difference between exec and system is not likely to be important.
Another difference between system and exec is in the way arguments are handled. The exec command passes the original arguments to the program untouched. In contrast, the system
command appends them together in the style of the concat command. Consider the following two commands:
exec Eprog a b "c d" system Sprog a b "c d" system "Sprog a b c d"
With exec, Eprog is called with three arguments (”a“, "b“, and "c d“) while both invocations of Sprog called with system receive ...