3
1

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 5 years have passed since last update.

Linuxで種々のファイルを開くopenコマンドを作る

Last updated at Posted at 2019-10-11

目的

Macのopenコマンド風にLinuxでもファイルを開けるようにします。つまり

myopen image.png
myopen /dir/doc.txt

とファイルパスを入力するだけで拡張子に対応したアプリでファイルを開けるようにするということです。

Macのopenコマンドでファイルを開く

環境

  • Ubuntu 18.04
  • zsh

方法

シェル起動時に読み込まれるファイルに関数を定義しておく。

  • bashなら~/.bashrc
  • zshなら~/.zshrc

zshの設定ファイルの読み込み順序と使い方Tipsまとめ

~/.zshrc
myopen() {
  # 第一引数は$1
  fpath=$1

  # パターンマッチで拡張子を取り出す
  fext="${fpath##*.}"

  # case文で分岐
  case $fext in
    pdf)
      # 拡張子がpdfのときに実行するコマンド
      evince $fpath & ;;
    png|jpg)
      eog $fpath & ;;
    c|cpp|txt)
      atom $fpath ;;
  esac
}

コメントに記載したとおりですが

  1. コマンド実行時の引数(ファイルパス)を受け取る
  2. 拡張子を取り出す
  3. 拡張子ごとに分岐してコマンドを実行する
    という流れです。

シェルスクリプト入門 書き方のまとめ
パス文字列からファイル名などを抜き出す

各ファイルは以下のアプリで開いていますが、もちろん好みのアプリに変更可能です。

  • pdf → evince
  • png, jpg → eog
  • c, cpp, txt → atom

.bashrcや.zshrcを更新したら以下のコマンドで変更を反映させます。

exec bash
exec zsh

冒頭に記載したように次のコマンドでファイルを開けるようになっているはずです。

myopen ファイルパス

おまけ(URLもブラウザで開く)

上記のopen関数に少し追加すればファイルだけでなくURLにも対応可能です。

~/.zshrc
myopen() {
  # 第一引数は$1
  fpath=$1

  # パターンマッチでURL判定
  if [[ $fpath =~ ^http ]]; then
    firefox $fpath &
    exit 0
  fi

  # パターンマッチで拡張子を取り出す
  fext="${fpath##*.}"

  (以下省略)
}

パターンマッチでhttpから始まるかどうかを判定し、trueならfirefoxで開くようにしています。次のように使用可能です。

myopen https://www.google.com/

bashでif に正規表現を使った文字列マッチ条件分岐

シェルの補完ができなくなった時

例えば./dirというディレクトリに移動しようとして

cd d(tab)

と入力してtabでディレクトリ名を補完しようとすると次のようなエラーが出ることがあります。

function definition file not found

これはシェルのキャッシュが不具合を起こしているためで、キャッシュファイルを削除してシェルを再起動すれば治ります。

rm ~/.zcompdump
exec zsh

zshでvim+Tabでエラーになる時の対処法

まとめ

.bashrcや.zshrcをカスタマイズすることでシェルを効率的に使えるようになります。関数の他aliasによるカスタマイズも一般的のようなので、自分の好みに合った設定を探してみるといいかもしれません。

aliasと関数で幸せになろう

また、今回記事を書くに当たって本文中にリンクした多数の文献を参考にさせていただきました。ありがとうございました。

3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?