Linux 屋が Mac を使うと環境変数が少ないなぁと感じる。
そのせいか osascript で環境変数を得る方法がなかなか見つからなかった。
いくら検索してもパスを通すことばかり、Windows と変わらないじゃん。
三時間くらい探し続けてやっと見つけた。
鳶嶋工房 / AppleScript / JavaScript for Automation (JXA)
osascript って stdlib のインクルードも可能なのか。
なら stdio もイケるかも、よしやってみよう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #!/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 の出力に押し出されてこうなる。
1 2 3 4 5 6 7 | #!/usr/bin/osascript ObjC. import ( "string" ); var nae = "優木苗" ; console.log (nae.length); //=>3 console.log ($.strlen(nae)); //=>9 |
おぉ日本語のバイト数も C 標準関数を使えば得られる。
Gjs で GLib 関数がフルに使えるのとほぼ同じことができるのね。
Mac で JavaScript も想像していたより便利そうです。