LoginSignup
3
4

More than 5 years have passed since last update.

自作シェルスクリプト実行時に、Tabキーで補完する拡張子を制限する

Last updated at Posted at 2018-01-28

Tabキーでの補完

たとえば、ディレクトリ内のファイルが、

端末
$ls
a.aux a.dvi
a.log a.pdf
a.tex a.toc
compile_tex.sh

このような場合に、自作シェルスクリプトcompile_tex.shを実行することを考えます。
まず、./c[Space][Tab]と入力すると、

端末
$./compile_tex.sh

とうまく補完されて入力できます。

しかし、Texファイル「a.tex」を引数にするため、さらに[Space]a[Tab]]を入力すると、

端末
$./compile_tex.sh a.

と意図通りに補完できません。
これは、a.から始まるファイルが複数あるためです。

ある拡張子だけを補完したい!

では、自作シェルスクリプトcompile_texTabキーによる補完候補を拡張子.texのものだけにするにはどうしたらいいのでしょうか。

たとえば、~/.bashrcに次の関数、

.bashrc
_compile_tex(){
  local cur=${COMP_WORDS[COMP_CWORD]}
  COMPREPLY=( $(compgen -W "$(ls *.tex)" -- $cur) )
}
complete -F _compile_tex compile_tex.sh

を追加し、変更を反映させます。

端末
$bash

このようにすることで、./compile_tex a[Tab]を入力した時に

端末
$./compile_tex.sh a.tex

と、拡張子「.tex」のものだけを補完することができました。

また、上記の関数_compile_tex()において、*.texの部分を変えることで、好みの補完ができるようになります。

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