Minecraftとタートルと僕

PCゲームMinecraftのMOD「ComputerCraft」の情報を集めたニッチなブログです。

CCコンピュータの環境変数PATHを設定する

環境変数PATHとは

前回の投稿で、CCの内部ディレクトリである「/rom/」以下に新しいプログラムをインストールする方法を説明したけれど、
インストール場所によっては、そのプログラムを実行するためにフルパス(そのプログラムのある場所を正確に)指定しなくてはいけなくなってしまう。

# 新しくインストールした cho-sugoi プログラムをフルパスで指定して実行
> /rom/programs/opt/cho-sugoi

でも本来は、フルパス指定が普通の動作であって、プログラム名だけで実行できるのは特別な設定がなされているからなんだ。
特別な設定とは、「あらかじめプログラムが入っているディレクトリを複数登録しておいてね。登録してある順にそのプログラムがないか探してあげるよ」というもので、世間一般のコンピュータでは「環境変数PATH」に登録することが慣習となっているよ。
CCコンピュータもそれを真似ているんだね。では環境変数はどこで設定したらいいんだろう。

# 本当は、初めから入っている標準のプログラムでも
# このようにフルパスでプログラムを実行しなくてはダメ
> /rom/programs/list

# でも /rom/programs/ はPATHに登録されているのでプログラム名だけでも実行可能
> list

環境設定スタートアップファイル

結論から言うとCCコンピュータの「/rom/startup」ファイルだよ。
ただしromディレクトリ以下にあるからゲーム内では変更できないので、Windowsで対応するファイルをメモ帳などのエディタで開いてね。

Modフォルダの「mods/ComputerCraft/Lua/rom/startup」だったよね。
以下、中身を転載するね。やっていることは大きく分けて3つあるので、3分割して説明するよ。

その1 環境変数PATHの設定

local sPath = ".:/rom/programs"
if turtle then
	sPath = sPath..":/rom/programs/turtle"
else
	sPath = sPath..":/rom/programs/computer"
end
if http then
	sPath = sPath..":/rom/programs/http"
end
if term.isColor() then
	sPath = sPath..":/rom/programs/color"
end

shell.setPath( sPath )
help.setPath( "/rom/help" )

もしそのコンピュータがタートルだったら、「/rom/programs/turtle」をPATHに追加してねとか、
そうでなかったら「/rom/programs/computer」の方を追加してだとか書いてあるね。
もし、プログラムインストール箇所を新しく追加したいのならば、以下のように「shell.setPath( sPath )」の直前の行に追加してあげればいいんじゃないかな。
以下の例では「/rom/programs/opt」を追加しているよ。

local sPath = ".:/rom/programs"

-- 途中省略

sPath = sPath..":/rom/programs/opt" -- 以下のshell.setPathの直前に追加

shell.setPath( sPath )
help.setPath( "/rom/help" )

その2 エイリアス(Alias)の設定

プログラムの別名が登録されているね。「list」プログラムを「ls」や「dir」という名前で実行できるのはこのおかげだね。

shell.setAlias( "ls", "list" )
shell.setAlias( "dir", "list" )
shell.setAlias( "cp", "copy" )
shell.setAlias( "mv", "move" )
shell.setAlias( "rm", "delete" )

その3 自動実行プログラムを置く場所の設定

これは何をやっているのか説明すると、
「/rom/autorun」というディレクトリを新しく作って、そこに実行しておきたいプログラムを突っ込んでおけば、CCコンピュータ起動時にそれらを全部自動実行するよという設定だね。
今は使っていないけれど、今後は使う機会があるかな?

if fs.exists( "/rom/autorun" ) and fs.isDir( "/rom/autorun" ) then
	local tFiles = fs.list( "/rom/autorun" )
	table.sort( tFiles )
	for n, sFile in ipairs( tFiles ) do
		if string.sub( sFile, 1, 1 ) ~= "." then
			local sPath = "/rom/autorun/"..sFile
			if not fs.isDir( sPath ) then
				shell.run( sPath )
			end
		end
	end
end