Linux 屋が Mac を使うと環境変数が少ないなぁと感じる。
そのせいか osascript で環境変数を得る方法がなかなか見つからなかった。
いくら検索してもパスを通すことばかり、Windows と変わらないじゃん。
三時間くらい探し続けてやっと見つけた。
鳶嶋工房 / AppleScript / JavaScript for Automation (JXA)
osascript って stdlib のインクルードも可能なのか。
なら stdio もイケるかも、よしやってみよう。
#!/usr/bin/osascript ObjC.import("stdlib"); ObjC.import("stdio"); var user = $.getenv("USER"); //console.log("ユーザー名は " + user + " です"); // 戻り値が出力されるので変数に入れている // printf って転送バイト数が戻るとは知らなかった... // 自動改行されるので \n を省いています var dev_null = $.printf("ユーザー名は %s です", user); /* //ShellScript から得るという手段もある app = Application.currentApplication(); app.includeStandardAdditions = true; var path = app.doShellScript("echo $LANG"); console.log("$LANG は " + path + " です"); */
なんだよ、glibc の関数が普通に使えるじゃないか。
しかし今まで何気に使っていた printf にこんな罠が。
ただ printf と console.log は混在させないほうがいい。
上記下側のコメントアウトを外してみよう。
出力が上下で入れ替わってしまった、ように見えますが。
単に printf と console.log で出力ポインタ管理が違う。
つまり console.log の出力は行先頭のままになる。
結果、最初の出力が console.log の出力に押し出されてこうなる。
#!/usr/bin/osascript ObjC.import("string"); var nae = "優木苗"; console.log(nae.length); //=>3 console.log($.strlen(nae)); //=>9
おぉ日本語のバイト数も C 標準関数を使えば得られる。
Gjs で GLib 関数がフルに使えるのとほぼ同じことができるのね。
Mac で JavaScript も想像していたより便利そうです。