【Mac】長ったらしいコマンドを短く

便利そうなコマンドなのに長ったらしい、とか、頻繁に使うコマンドなのに、オプションが覚えづらい、とかいうことがある。
 そういうコマンドは alias に登録してしまうと便利だ。

alias に登録する

以下はデスクトップのアイコンを隠したり、表示したりする命令である。

# デスクトップのアイコンを表示する
defaults write com.apple.finder CreateDesktop false && killall Finder
# デスクトップのアイコンを隠す
defaults delete com.apple.finder CreateDesktop && killall Finder

長くて覚えられない。実行する時は、どこかにメモしたものをコピペしたりして、けっこうダルい。
 alias コマンドが活躍するのはこんな時だ。
 alias を使えば、自分の好きな、短い文字列で上記の命令を呼び出せる。
 登録は簡単。こんなふうに書く。

alias 登録名='命令文'

先ほどのデスクトップのアイコンの命令を、「hideIcon」、「showIcon」と名付けるとする。

alias hideIcon="defaults write com.apple.finder CreateDesktop false && killall Finder"
alias showIcon="defaults delete com.apple.finder CreateDesktop && killall Finder"

試してみると、ちゃんと動作する。

alias の解除は以下の通り。

unalias 登録名

既存の alias は、alias とだけ打ちこんでリターン押すと、リストとして表示される。
 同じ登録名で alias を設定し直すと、上書きされる。

alias の設定は、ターミナルを再起動すると元に戻ってしまう
 ターミナルを起動するたびに alias を設定し直すのは現実的ではない。
 なので、.bash_profile に記述しておく。

bash_profile

.bash_profile は、ターミナルが起動するたびに読みこまれる書類である(参考 【Mac】 パスを通す | 林檎コンピュータ)。
 自分用の .bash_profile はホームフォルダに置かれる。
 頭にドットのついた隠しファイルだ。
 ホームフォルダで ls -a を実行すると、隠しファイルを確認できる。もし .bash_profile がなければ、自分で作る。

touch ~/.bash_profile

この書類をテキストエディタで開く。

# テキストエディットで開く
open -e ~/.bash_profile
# CotEditor で開く
open -a CotEditor ~/.bash_profile

エディタで開いた .bash_profile に alias の設定を書きこんでおけば、ターミナルが起動するたびに設定を実行してくれる。
 そもそも、この bash_profile を開く命令がけっこう面倒だ。
 alias にしておこう。

alias prof='open -a CotEditor ~/.bash_profile'

「prof」だけで .bash_profile を開いてくれるようになる。あとは面倒なコマンドの指定を書きこんでおけばいい。

youtube-dl は動画をダウンロードする便利なコマンドだが、保存先を指定する書式が少し面倒だ。

youtube-dl -o "~/Movies/%(title)s.%(ext)s" 動画URL

ムービーフォルダにダウンロードするなら、上記のように書かなくてはならない。さらにいえば、youtube-dl というコマンド名も長い。こういうのも alias を設定しておくべきだろう。

alias dl='youtube-dl -o "~/Moivies/%(title)s.%(ext)s"'

「dl 動画ページURL」だけで ムービーフォルダに動画をダウンロードしてくれるようになった。

.bash_profile に関数を書く

カップラーメンを作るとき、パソコンで手軽に三分を測れれば便利だ。
 使えそうなコマンドは「sleep」である。

sleep 秒数

で、秒数分の時間、処理を止めてくれる。

sleep 180; say 'ラーメンが出来ました'

このようにセットしておけば、三分後、kyoko さんが時のきたことを教えてくれる。
 これも alias に登録しておけば便利だろう。

alias ramen="sleep 180; say 'ラーメンが出来ました'"

しかしながら、カップラーメンの待ち時間がいつも 3 分であるとは限らない。2 分で出来るものもあるし、5 分かかるものもあるだろう。その都度、時間を指定できれば便利だ。

ramen 5

などと、5 分なら 5 という引数を渡せればいいのだが、どうもうまくいかない。
 検索して、.bash_profile に関数を書いてもいいことを知った。参考にさせていただいたのは、以下のサイトさまだ。

🔗 bashのalias に引数を渡すには? – それマグで!

関数は、以下のように書く。

function 関数名() {
	処理
}

ラーメンの関数を書いてみた。

function ramen() {
	date
	if test -z "$1"; then
		min=3
	else
		min=$1
	fi
	sleep `echo "$((min * 60))"`
	date
	osascript -e 'display notification "ラーメンが出来ました。"'
	say 'ラーメンが出来ました'
}

これで 待ち時間が何分かを引数にして実行できる(引数なしだと 3 分)。
 osascript -e というのは、AppleScript を実行する、macOS 固有のコマンドだ。AppleScript の display notification "メッセージ" で、通知センターに通知を飛ばせる。

便利なやり方だが、あんまり長くなるならシェルスクリプトにするがいいだろう。しかし、ちょっとしたものなら、.bash_profile に関数を書くほうが楽かもしれない。