uname

cat /etc/hostname

は macOS では使えないジャン!

えっと macOS でホスト名を得るには $HOSTNAME が使えるのか。
いや /proc/version とかも Linux だけだ、うーん。。。。。

カーネルのバージョンなどのシステム情報を調べるには

uname があった!
これなら Fedora, macOS のどちらでも同様だ。

シェルスクリプトの覚書色々 – L’Isola di Niente

ということで前回のデフォルト引数等を含めて書き換えました。
えらそうに Tips ページなんか作っていてまだ知らないこと多いな。

Macbook Air dual boot in Fedora

Macbook Air 2011 を Fedora にする。
とかなり前に書いてすっかり忘れていたのでそろそろヤル。
上書きも考えたけど一応デュアルブートにすることに。

このページを参考にした、古い Ubuntu だけど。
【Tips】MacBookにUbuntuを入れてデュアルブート環境を構築する方法 | ソフトアンテナブログ

とりあえず 40GB の FAT パーティションの確保。
最後に「失敗しました」と出たけどパーティションは作れていた。
なおスワップ用パーティションを別に作る必要はない。

Fedora 29 Install (SSD) | PaePoi
で作った USB メモリを再利用。

EFI Boot を選択し return で Live が起動。即インストールを選択。
まず日本語を選択、US キーボードに変更。
インストール先は 1 つしか出ないので選択して完了すると領域不足と出る。
ボタンを押して先程作った FAT パーティションを選択して削除する。
これでインストール開始できる。

電源を落とし USB メモリを抜いて再起動。
grub 画面の一番下に「MAC OS X」が出るけど選択しても起動できない。
macOS を起動するには普通に option キーを押しながら電源ボタン。

まず WiFi を設定、って接続できない!
とりあえずスキップしてユーザー名とパスワードの設定。
普通に起動できました。

WiFi については下記の Install WiFi drivers のコマンドで。
コマンドの前に sudo を付けるのを忘れずに。
Installing Fedora on Macbook Air | There is no magic here
筆者は現在 WiMax なので USB 接続の簡易有線 LAN を使った。
再起動後には WiFi 接続できるようになっていた。

ファンクションキーが fn を押してもメディアキーのまま。
しかも動作が変なので以下を 1 から 2 に書き換える。

sudo vi /sys/module/hid_apple/parameters/fnmode

さっきのリンク先のとおりに hid_apple.conf も作成しておく。

fn キーは Macbook には無いキーには使えるようだ。

Super:  command
Delete: fn+delete
Home:   fn+←
end:    fn+→

ファイル共有を ON にして、判りやすいようにホスト名を変更して

#nmcli general hostname ***.***
nmcli general hostname fnote.local

他の Fedora で nautilus の「他の場所」から簡単に接続できる。
デフォルトで「公開」ディレクトリね、皆変えていると思うけど。

後は、rEFInd は特に必要ないな。
キーボードが光らないことのほうが気になるよ。
タッチパッドの二本指スクロールが早過ぎなんだけど調節できないのかな?
Air 2018 はそのまま使うよ、だって TouchID が Fedora で動くはずないし。

そんなことより困ったぞ、control と command を間違えまくる。
Ctrl+C は当然 control+C なんだが command+C を押してしまう。
Fedora デスクトップと Macbook Air の併用に慣れすぎだ…
このキーボードではそういうふうに指が勝手に動く、予想外だったZE!

Bash Default Parameter

こんなページを見ていたんですが。
macOSのターミナル(bash)のプロンプトを変えました。 – Qiita

${BASH-no} って所の no はデフォルト引数ってことじゃないの?
シェルスクリプトの覚書色々 – L’Isola di Niente
デフォルト引数ならば ${BASH:-no} と書く、と思っていたんだけど確認。

Parameter Substitution

:-, – のどっちでも良かったのね!
macOS の 3.2.57、Fedora の 4.4.23 にて確認しました。

しかし /etc/profile の中身は Fedora と随分違うな。

Fedora も最後はドットコマンドで /etc/bashrc を取り込んでいる。
こっちは [ -n “${BASH_VERSION-}” ] とやはりデフォルト引数を使っている。

でも宣言されていない変数なら空文字になるのでいらなくない?

[ -n "${BASH_VERSION}" ]

だけでいいような。

/etc/bashrc の存在確認が -r だったり -f だったり。
バージョンが新しい Fedora では && を一切使っていなかったり。
同じ bash でもこういうのはベンダー毎に作っているんだね。

ところで macOS が 10.14.2 にアップデート。
JXA で NSMakeRect は使えないままでした、しょんぼり。

jshell

すまぬ、Mojave には Ruby が入っていたのをさっき気が付いた。
ruby と打っても何も起きなかったんで、インタラクティブシェルは irb だったよ。
Python3, Gjs 共に引数無しでインタラクティブシェルなのでうっかり勘違い。
jxa は -i オプションなんだよね、統一してくれると助かるけど無理だろうな。

インタラクティブシェルといえば Java もできるようになったっけ。
[Java9 新機能] jshell入門 – Qiita
Fedora に入っている OpenJDK 11 でも使えるのかな?

使えるようだ、これも javac は多分必要なんだろうけど。
冗談のつもりで public を付けたら通った、何の公開メソッドだよw
更に static まで付けたら怒られた、当然か。
print も console.log も使えない、println 書くのメンドイぞ。

ところで終了は普通のシェル同様に Ctrl+D でできる。
macOS では control+D は使えないのか?
いや、Qiita の mac 使いは control+C でシェルを終了している輩が多々…
ちなみに Ctrl+C は無視される、Python も同じだけどね。

しかし今の Java で var が使えてスクリプト言語みたく使えてこんなことまで。
GraaLVM って必要性をあまり感じなくもないような。

JXA: File trash

現行の Fedora では

gio trash ファイル名

コマンドでゴミ箱にファイルを捨てることができる。
macOS でも jxa で同じことがしたい。

javascript – Send to Trash with JXA on Mac OS – Stack Overflow

あっさり見つかったけどこれ Finder.Item である必要があるヤン。
そうじゃなくて普通のコマンドとして使いたいんだよ。

[macOS] コマンドラインからゴミ箱へ削除するスクリプトを書きました – Qiita

同じことをやりたい人って結構いるみたい。
これを JXA に変換しようと思ったけどよく解らない。
Objective-c からの変換のほうが簡単って変な感じだお。

(旧) Cocoaの日々: NSWorkspace – recycleURLs:completionHandler:(ゴミ箱に捨てる/復活させる)

うん、こっちなら結構簡単に JXA 変換できそう。
と思って書いてみたけど完走しても動かなかった。

コマンドラインアプリケーションでのNSWorkspaceの利用 – XCode(4.6)でコ… – Yahoo!知恵袋

NSWorkspace は GUI でないといけないのかな。
多分ハンドラがあるので mainloop が必要なだけだと思うけど。
ならば NSApplication を使えばイケそうだ、やってみよう。

#!/usr/bin/osascript -l JavaScript

ObjC.import("Cocoa");

function run(argv) {
    let urls = [];
    for (path of argv) {
        urls.push($.NSURL.alloc.initFileURLWithPath($(path)));
    }
    $.NSWorkspace.sharedWorkspace.recycleURLsCompletionHandler($(urls), (newURLs, error)=> {
            console.log("done");
            $.NSApp.terminate(0);
        }
    );
    $.NSApplication.sharedApplication;
    $.NSApp.run;
}

trash

これを trash という拡張子の無いファイル名でパスの通った所に置いて。
拡張子を外すので -l オプションを忘れずに。

trash filename ...

ワイルドカードも使えるし日本語ファイル名もバッチリ(死語)だぜ!
こんな短いコードでできたお、変換だらけなのは JXA の宿命。