使用 system 命令将要执行的字符串传递到操作系统。将返回操作系统命令的输出。
例如:
system "ls -l";
在基于 UNIX 的系统(不是 Windows)上,这将以长格式打印当前目录到“脚本编辑器”(Script Editor)。Windows 等效:
system "dir";
后台进程(仅非 Windows)
若要在后台运行命令(即,执行非阻塞系统调用),则必须重定向所有命令的输出:system("cmd >/dev/null 2>&1 &");
当然,可以发送输出到 /dev/null 之外的其他地方。
文件名
应始终将路径名括在引号中。尤其在 Mac OS 中,文件名可以包含拥有命令行含义的字符,如空格、|(管)、>(重定向)和 &(在后台运行)。
例如,不执行该操作:
string $fileName = {get this from somewhere}; system ("some_command " + $fileName);
...改为使用以下:
system ("some_command "" + $fileName + """);
这使得代码独立于平台。
AppleScript 和 UNIX 使用不同的文件夹分隔符。AppleScript 使用冒号 (::),而 UNIX 使用正斜杠 (/)。此外,UNIX 中的体积带有前缀 /Volumes/,而在 AppleScript 中,路径以划分名称开头。
在以下示例中,一个名为 eagle.ma 的场景文件在名为 Emerald 的体积(划分)上。
AppleScript 表示为:
Emerald:projects:default:scenes:eagle.ma
UNIX 表示为:
/Volumes/Emerald/projects/default/scenes/eagle.ma
若要在文本编辑中打开 eagle.ma,您可以使用:
tell application "TextEdit" open "Emerald:projects:default:scenes:eagle.ma" end tell
若要从 Unix Shell 的文本编辑打开该文件,您可以输入:
open -e /Volumes/Emerald/projects/default/scenes/eagle.ma
文件引用和导入的文件名注意事项
无法从其名称是非法标识符的命令行引用或导入文件,除非明确使用 -rpr 或 -ns 标志。这将包含文件名以数字开始的文件。若要避免该问题,建议您避免命名文件,以便它们以数字开始。否则,您将需要使用以下解决方法。
解决方法
使用 -rpr 或 -ns 标志明确指定有效的重命名前缀。
重命名文件为以字母开头的名称(例如,a107953.sph.ma)。
线末端
若要将 UNIX 命令应用到 Mac OS X 上的 mayaAscii 场景文件内容中,将场景文件转化为具有 UNIX 线末端。您可以使用 Mac OS X tounix 命令执行该操作。
例如,如果您的 MEL 代码在另一个平台上看起来像这样:
string $fileName = {get this from somewhere}; string $result = system ("grep something" + $fileName);
...改为使用以下:
if ('about -mac') { system("tounix "" + $fileName + """); } string $result = system ("grep something "" + $fileName + """);