システム コマンドを実行する

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 シェルからテキストエディットでファイルを開くには、次のように入力します:

open -e /Volumes/Emerald/projects/default/scenes/eagle.ma

ファイルを参照、読み込みするために、ファイル名に関する注意事項

コマンド ラインに -rpr フラグまたは -ns フラグを明示的に指定しない限り、名前が有効な識別子ではないファイルをコマンド ラインから読み込みまたは参照することはできません。これには、数字で始まる名前のファイルも含まれます。この問題を回避するには、ファイルに数字で始まる名前をつけないようにします。それ以外の場合、下記の解決方法を使用する必要があります。

解決方法

  • -rpr または -ns フラグを使用して、正しいプリフィックスを明示的に指定してください。
  • ファイルの名前を変更して、文字で始まる名前にします(たとえば、a107953.sph.ma)。

ライン エンド

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 + "\"");