std.os

プログラムの外側とのやり取り。引数・環境変数・場所・外のプログラム。任意モジュール。ゲーム機のように外を持たない処理系では、import でエラーになる。

import std.os;
print(os.platform().len() > 0);   // true
os.args os.env os.set_env os.platform os.cwd os.chdir os.temp_dir os.exit os.run Output.code Output.out Output.err

関数

os.args() → list<string>

コマンド引数。1番目はプログラム名。

var args = os.args();
print(args.len() >= 1);   // true
os.env(name: string) → string?

環境変数を読む。無ければ none。

os.set_env("SHARK_FISH", "さめ");
print(os.env("SHARK_FISH") ?? "");   // さめ
print(os.env("SHARK_NOTHING") ?? "無し");   // 無し
os.set_env(name: string, value: string) → void

環境変数を書く。このプロセスと、ここから起動するプログラムに効く。

os.set_env("SHARK_FISH", "ふぐ");
print(os.env("SHARK_FISH") ?? "");   // ふぐ
os.platform() → string

動いている環境。"macos" "windows" "linux" "wasm" "embedded" のどれか。

print(os.platform() != "");   // true
os.cwd() → Result<string>

いまいるディレクトリ。

if var here = os.cwd() { print(here.len() > 0); }   // true
os.chdir(p: string) → Result<void>

いまいるディレクトリを変える。

_ = os.chdir(os.temp_dir());
if var here = os.cwd() { print(here.len() > 0); }   // true
os.temp_dir() → string

一時ファイルを置いてよい場所。

print(os.temp_dir().len() > 0);   // true
os.exit(code: int) → void

すぐ終わる。戻ってこない。走っているタスクは待たない。

ふつうは main から return する方がよい。

if os.args().len() < 2 {
  print("使い方: fish <ファイル>");
  os.exit(1);
}
os.run(cmd: string, args: list<string>) → Result<Output>

外のプログラムを起動して、終わるまで待つ。シェルは通さない。

cmdstringプログラムの名前か場所
argslist<string>渡す引数。空白で区切らず、1つずつ入れる
if var o = os.run("echo", ["さめ"]) {
  print(o.code());          // 0
  print(o.out().trim());    // さめ
}

Output

外のプログラムの結果。

Output.code() → int

終了コード。0 なら成功したことが多い。

if var o = os.run("echo", ["さめ"]) { print(o.code()); }   // 0
Output.out() → string

標準出力に出たもの。

if var o = os.run("echo", ["さめ"]) { print(o.out().trim()); }   // さめ
Output.err() → string

標準エラーに出たもの。

if var o = os.run("echo", ["さめ"]) { print(o.err() == ""); }   // true