何を今頃だけど JavaScript の replace について。
String.prototype.replace() – JavaScript | MDN
第一引数を正規表現にすればすべてのマッチした箇所を置換できるのか。
最初に一致した箇所だけだとずっと勘違いしていた筆者であった。
JXA: doShellScript Line feed code | Paepoi Blog
これを試しに書き換えしてみよう。
#!/usr/bin/osascript let app = Application.currentApplication(); app.includeStandardAdditions = true; res = app.doShellScript('ls -l'); console.log(res.replace(/\r/g, '\n'));
いけた。
ついでに。
よく考えたらコマンドの中で tr を使って変換すりゃいいじゃん。
と思ってやってみたら上手くいかなかった。
#!/usr/bin/osascript let app = Application.currentApplication(); app.includeStandardAdditions = true; // no... //res = app.doShellScript('ls -l | tr "\r" "\n"'); // test res = app.doShellScript('ls -l | tr "\n" "|"'); console.log(res);
となる。
つまりコマンド実行の時点では改行コードは LF のまま。
doShellScript が値を戻す時に CR へ変換しているようです。
LF のまま戻すオプションって無いのかな?
#!/usr/bin/osascript let app = Application.currentApplication(); app.includeStandardAdditions = true; res = app.doShellScript('ls -l', {alteringLineEndings:false}); console.log(res);
あった、今後はコレで。
ついでに、doShellScript は bash の POSIX 互換モードです。
zsh やフル状態の bash ではないので注意、macOS って本当に色々面倒臭い。
プログラミングするならやっぱり Linux だよ、某サル専用を除く。
関係ないけど Macbook Air 2020 が出たね、かなり良さげ。
でも筆者はこんな使い方ばかりだから 2018 モデルで何の不満も無いのよね。
ペチペチキーボードにもすっかり慣れてしまったし、うるさいけど。
さて 10.15.4 にアップデートするか。