system コマンドを使用して、文字列をオペレーティング システムに渡して実行します。オペレーティング システムのコマンドの出力が返されます。
例:
system "ls -l";
UNIX ベースのシステム(Windows ではない)でこのコマンドを使用すると、スクリプト エディタ(Script Editor)に現在のディレクトリが長い書式で出力されます。Windows の場合は次のコマンドを使用します。
system "dir";
コマンドをバックグラウンドで実行するには(つまり非ブロック システム コールを実行するには)、コマンドの出力をすべて転送する必要があります。
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 シェルからテキストエディットでファイルを開くには、次のように入力します:
open -e /Volumes/Emerald/projects/default/scenes/eagle.ma
コマンド ラインに -rpr フラグまたは -ns フラグを明示的に指定しない限り、名前が有効な識別子ではないファイルをコマンド ラインから読み込みまたは参照することはできません。これには、数字で始まる名前のファイルも含まれます。この問題を回避するには、ファイルに数字で始まる名前をつけないようにします。それ以外の場合、下記の解決方法を使用する必要があります。
Mac OS X 上で mayaAscii のシーン ファイルのコンテンツに UNIX コマンドを適用するには、シーン ファイルを変換して 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 + "\"");