2015年3月8日日曜日

CentOS7 の bash の補完機能は便利なのだが、たまに無効化したい

CentOS 7 の bash は、CentOS 6 までと違って、デフォルトの補完機能が拡充されていて、例えば、systemctl のオプション候補を出したりするときに、大変便利です。
[root@hoge ~]# systemctl list-  ※ここまで打って、TAB を押下すればオプション候補一覧が表示される
list-dependencies  list-jobs          list-sockets       list-unit-files    list-units         
[root@hoge ~]# systemctl list-

ところが、例えば、initramfs を再作成するような場面で、、、
[root@hoge ~]# dracut -f /boot/initr  ※CentOS 6 以下だと、ここで TAB を押下すれば候補が出たんだけど
ファイル一覧を出して欲しいのですが、CentOS 7 の場合は、デフォルト設定では候補が出なくなってしまっています。
このケースに限ると、alias の回避と同様に、先頭にバックスラッシュをつければ良いようです。本日、気が付いた。
[root@hoge ~]# \dracut -f /boot/initr
initramfs-0-rescue-17561ed66271e2f6923ff3c901624b3a.img
initramfs-3.10.0-123.20.1.el7.x86_64.img
initramfs-3.10.0-123.20.1.el7.x86_64kdump.img
initrd-plymouth.img
[root@hoge ~]# \dracut -f /boot/initr
しかしながら、次のような場合は、NG のようです。
[root@hoge ~]# \dd if=/dev/uran  ※/dev/urandom を出したいが、ここで TAB を押下しても補完してくれない
どうにか出来無いもんでしょうかね。
[root@hoge ~]# \dd if= /dev/uran  ※このように = の後ろに1スペース入れると TAB 補完が動くのだが、戻るのが面倒

2 件のコメント:

  1. デフォルトの挙動にしたいだけなら、
    complete -r dracut
    常にファイル名補完でよいなら
    complete -f dracut
    で行けそうです。

    dd は真面目に対応しないとダメですが、
    debian の定義ファイルは対応できているので、
    http://anonscm.debian.org/cgit/bash-completion/bash-completion.git/tree/completions/dd
    これを参考に自前で定義を書くなり、
    必要な部分だけ切り出してくるのが楽かと。

    返信削除
    返信
    1. over80様、コメントありがとうございました。おかげさまで、重い腰をあげて、学習進められそうです。debian の定義ファイルや man bash を、まじめに読んでみたいと思います。とりあえずは、complete -f dd だけでも、しのげそうです。

      削除

人気ブログランキングへ にほんブログ村 IT技術ブログへ