このページでは Shell API について解説する。
参考資料:
執筆時のバージョン:
- ComputerCraft 1.55 for Minecraft 1.6.2
Shell API
シェル(ユーザーインターフェース)プログラムに関するAPI。
assets\computercraft\lua\rom\programs\shell で定義
exit
- shell.exit()
- 現在実行中のシェルを終了する
- 戻り値:nil
トップレベルのシェルを終了した場合、コンピュータはシャットダウンされる。
dir
- shell.dir()
- カレントディレクトリのパスを取得する
- 戻り値:文字列型。カレントディレクトリのパス
ルートディレクトリは""(サイズ0文字列)。
setDir
- shell.setDir( path )
- カレントディレクトリを絶対パスpath(文字列)に設定する
- 戻り値:nil
未作成のディレクトリでも設定できる。
例:
shell.setDir( "rom" )
カレントディレクトリをromに変更する。
path
- shell.path()
- ファイルの検索対象となるパスを取得する
- 戻り値:文字列型。ファイルの検索対象となるパス
いわゆる環境変数PATHに相当する文字列を取得する。戻り値には複数のパスが含まれている可能性があり、":"(コロン)で区切られている。
デフォルトの値は assets\computercraft\lua\rom\startup で定義
Computer:
.:/rom/programs:/rom/programs/computer
Advanced Computer:
.:/rom/programs:/rom/programs/computer:/rom/programs/color
Turtle:
.:/rom/programs:/rom/programs/turtle
Advanced Turtle:
.:/rom/programs:/rom/programs/turtle:/rom/programs/color
※HTTP APIが有効な場合は、上記各パスに :/rom/programs/http が追加される
setPath
- shell.setPath( path )
- ファイルの検索対象となるパスをpath(文字列)に設定する
- 戻り値:nil
検索対象のパスをpathで上書きする。任意のパスを追加する場合は、shell.path関数で取得した文字列の後ろに":"(区切り記号、コロン)+追加パスの形で追加する。
resolve
- shell.resolve( localpath )
- パスlocalpath(文字列)を絶対パスにして返す
- 戻り値:文字列型。変換された絶対パス
localpathをカレントディレクトリからの相対パスと見なし、絶対パスに変換して返す。ただし、localpathが"/"または"\\"で始まる場合は、localpath自体が絶対パスとして扱われ、戻り値は単にlocalpathから先頭の"/"や"\\"を削除したものとなる。
resolveProgram
- shell.resolveProgram( name )
- エイリアス(プログラムの短縮名)や検索対象となるディレクトリからプログラム名(ファイル名)name(文字列)を検索し、nameが見つかった場合はその絶対パスを返す。
- 戻り値:文字列型。nameの絶対パス。見つからなかった場合はnil
まず始めに、nameをエイリアスのリストから検索する。次に、nameがエイリアスだった場合はエイリアスに登録された本来のプログラム名を、エイリアスでなかった場合はname自体をプログラムの相対パスと見なし、検索対象となるディレクトリから検索する。ただし、エイリアスの本来のプログラム名またはnameが"/"または"\\"で始まる場合は、それを絶対パスと見なしてそのパスだけを検索する。
検索対象となるディレクトリはshell.path関数で得られ、shell.setPath関数を使えば任意に変更できる。
shell.run関数やシェル上(プロンプト">"に続いてプログラム名と引数を入力してEnterを押す)からプログラムを実行する時にも、入力したプログラム名を絶対パスに変換するために使われている。
例:
print( shell.resolveProgram( "hello" ) )
プログラムhelloを検索し、絶対パスを表示する。Computerの場合は"rom/programs/computer/hello"と表示される。Turtleの場合は見つからないので何も表示されない。
programs
- shell.programs( [ hidden ] )
- 検索対象となるディレクトリにある全てのファイルの名前を取得する。
hidden(ブーリアン)がtrueの場合は隠しファイルも対象となる。省略あるいはfalseの場合は隠しファイルを無視する
- 戻り値:テーブル型。キーは1以上の整数、値は見つかったファイル名(文字列)。昇順ソートされている
隠しファイルとは名前が"."で始まるファイルのこと。
検索対象となるディレクトリはshell.path関数で得られ、shell.setPath関数を使えば任意に変更できる。
aliases
- shell.aliases()
- エイリアス(プログラムの短縮名)のリストを取得する
- 戻り値:テーブル型。キーはエイリアス(文字列)、値は実際に実行されるプログラム名(文字列)
setAlias
- shell.setAlias( alias, program )
- alias(文字列)をプログラムprogram(文字列)のエイリアス(短縮名)として設定する
- 戻り値:nil
エイリアスのエイリアスを指定することはできない(programはプログラム名)。
例:
shell.setAlias("start", "startup")
プログラムstartupのエイリアスとしてstartを設定する。
clearAlias
- shell.clearAlias( alias )
- 設定されているエイリアス(プログラムの短縮名)alias(文字列)をクリアする
- 戻り値:nil
例:
shell.clearAlias("start")
エイリアスstartをクリアする。
run
- shell.run( program [, ...] )
- プログラムprogram(文字列)を実行する。2番目以降の引数...(文字列)でプログラムに渡される引数を指定できる
- 戻り値:ブーリアン型。成功したらture、失敗したらfalse
プログラム名
programをshell.resolveProgram関数を使って絶対パスに変換してから
os.run関数で実行している。
プログラム側では可変引数...で実行時に指定した引数を受け取ることができる。ただし引数は全て文字列として渡されるため、数値はtonumber関数で数値型に戻す必要がある。
例:
shell.run("myprogram", "test", "ing")
プログラムmyprogramを引数に"test"と"ing"を指定して実行する。
getRunningProgram
- shell.getRunningProgram()
- 現在実行しているプログラムのパスを取得する
- 戻り値:文字列型。実行しているプログラムの絶対パスが返る
最終更新:2014年01月01日 11:35