0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[fish-shell] [02] ファイル種別に応じた実行コマンドを呼び出す

Posted at

概要

第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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?