本章介绍如何使用REBOL Shell接口执行程序和Shell命令,以及重定向命令输入和输出。
Shell是一个操作环境。它使用户能够与程序和操作系统进行通信、执行和控制程序。根据操作系统的不同,shell差别很大。
外壳界面使REBOL能够与外壳程序和操作系统通信。Shell接口使用调用函数来执行内置命令或程序。这些内置命令和程序也称为shell命令。(在本章中,术语shell命令指的是内置命令和程序。)。
在Unix和Windows中,使用Shell界面,可以从文件、URL、端口、字符串值或REBOL控制台重定向到Shell命令的输入。Shell命令的正常和错误输出都可以重定向到文件、URL、端口、字符串值或REBOL控制台。
使用CALL函数执行shell命令。以下示例显示了CALL函数的语法:
CALL函数接受一个参数,该参数可以是指定shell命令及其参数的字符串或块。
在本例中,call执行Unix文件复制命令cp,并传递两个文件参数:Soure.txt和dest.txt。在计算call时,字符串被转换为shell命令,该命令调用cp并传递两个参数。结果是将Soure.txt文件复制到dest.txt文件。
如果要在对shell命令的调用中包括REBOL值,请将块参数与CALL一起使用,如下例所示:
在本例中,使用块值调用cp命令来传递参数Soure.txt和dest.txt。必须减少块,调用函数才能获得source和dest变量引用的文件名。
CALL函数将块中的文件名转换为shell使用的表示法。例如,参数。
使调用等待shell命令的返回码。然后,调用函数将shell命令的返回码返回给REBOL程序。
仅限Windows和Unix:将字符串、文件、端口和URL数据作为输入重定向到shell命令。
仅限Windows和Unix:将shell命令输出重定向到字符串、文件、端口或URL。
仅限Windows:强制使用外壳。(因为在Windows中,使用CALL启动的程序通常不会从shell运行,而是直接从操作系统启动。)。
仅限Windows和Unix:将shell命令错误重定向到字符串、文件、端口或URL。看见。
仅限Windows和Unix:将shell命令的所有输入和输出重定向到REBOL控制台。这使控制台能够直接与shell命令交互。看见
当REBOL使用shell执行shell命令时,可以在call函数传递的参数中使用shell特性。外壳功能包括重定向和扩展符号。这些符号是最常见的:
<;标准输入(Stdin)>;标准输出(Stdout)|管道输出到另一个命令*通配符匹配零个或多个字符?匹配任何单个字符。
在Unix中,REBOL语言使用shell调用所有命令。最常见的Unix shell有bsh(Bourne Shell)、csh(C Shell)、ksh(Korn Shell)和bash。
Unix shell环境变量确定使用哪个shell rebol来执行命令。默认情况下,环境变量设置为当前使用的shell的路径。例如,如果REBOL是从C shell启动的,则shell环境变量设置为C shell的路径。因为所有Unix shell都支持-c选项,该选项会导致shell在命令执行后退出,所以REBOL在调用Unix程序时会自动使用该选项。
REBOL通常绕过shell直接调用Windows程序。因此,不能在CALL命令传递的参数中使用Windows外壳功能(如重定向和扩展符号)。但是,当执行内置的Windows shell命令或DOS程序时,REBOL使用shell。发生这种情况时,REBOL调用命令shell命令.com(Windows)或cmd.exe(Windows NT)。调用Windows shell命令时,rebol会自动使用/c开关,该开关会导致shell在执行命令后退出。
当调用shell命令时,它们通常作为单独的进程与REBOL并行运行。它们与REBOL是异步的。
但是,有时您需要等待shell命令完成,例如当您执行多个shell命令时。此外,每个shell命令都有一个返回代码,该代码通常指示命令的成功或失败。通常,shell命令在成功时返回零,在不成功时返回非零值。
/WAIT细化导致调用函数等待命令的返回码,并将其返回给REBOL程序。然后可以使用返回代码验证命令是否成功执行,如下例所示:
在上面的示例中,Call成功执行了Windows dir命令,该命令由零返回值表示。但是,在下一个示例中,call在执行xcopy命令时失败,返回值不是零。
当您使用/INPUT、/OUTPUT、/ERROR或/CONSOLE优化时,您会自动设置/WAIT优化。