概要
第1引数で与えたファイルの種別を判定し、
ファイル種別に応じたコマンドを呼び出すスクリプト.
fish-shell V2.7.1 で動作確認済み.
コード
fish-invoker.fish
#!/usr/bin/env fish
if test -z {$argv[1]}
# 引数存在せず
echo '$argv[1] was empty...' >&2
exit 2
else if test ! -e {$argv[1]}
# ファイル存在せず
echo "$argv[1]: no such file" >&2
exit 2
end
# 呼び出したいコマンドを定義する
set -l MY_EDITOR "nvim"
set -l MY_OPEN "xdg-open"
# 引数で指定されたファイル種別をチェックして、変数 ftype に格納する.
set -l ftype ( file -b -i $argv[1] )
switch $ftype
case "text/*"
# ftype が「text/*」と表示されていれば、nvim $argv[1] として Neovim エディタで開く.
eval $MY_EDITOR $argv[1]
case "application/x-sharedlib; charset=binary"
# ftype がバイナリ形式と表示されていれば fish シェルに処理させる.
set cli "fish -c $argv[1]"
eval $cli
case "application/x-executable*charset=binary"
# ftype がバイナリ形式と表示されていれば fish シェルに処理させる.
set cli "fish -c $argv[1]"
eval $cli
case "*x-empty*"
# 空ファイルと判定されたら何もしない
echo 'SKIP: $argv[1]: empty file...'
case "*"
# 上記に一致しなければ xdg-open に任せる
eval $MY_OPEN $argv[1]
end
実行結果
#! 現在のディレクトリを表示する
$ fish-invoker.fish /bin/pwd
/tmp/
#! $HOME/.bashrc を nvim で開く
$ fish-invoker.fish $HOME/.bashrc
#! $HOME/Download/a.pdf に関連付けされたアプリを xdg-open を通して呼び出す
$ fish-invoker.fish $HOME/Download/a.pdf