Bashに次のコマンドがあるとしましょう。
$ pyt[TAB][TAB]
pytest
python
python-config
python-dbg
99%を選択してくださいpython
。あまりにも迷惑なので、電話をかけるためにpytest
タイピングができなくなります。 Bashの完了を隠すことはできますか?pyt[TAB][RETURN]
python
pytest
私の限界:
bashでこの提案が発生しないように
pytest
atバイナリを削除できることを知っています。/usr/bin/pytest
しかし、rootアクセス権がない場合はどうなりますか?pytest
他のスクリプトが正しく機能するために重要なスクリプトが必要な場合はどうなりますか?pytest
バイナリを削除することはできますが(以前にこれを行ったことがあります)、時にはソフトウェアをアップグレードするとこのスクリプトが再び表示されます。alias
私は好きなアプリのキーストロークを保存するために使用できることを知っていp
ますpython
。しかし、私はこれらの非標準的な略語が好きではありません。リモートで別のコンピュータに接続すると、これが私を混乱させます。
それでは、Bashの完了時に特定のコマンドを非表示にする方法はありますか?最近のbashのために作業速度が上がらなかったので、他のシェル(zsh、fishなど)を使った答えを歓迎します。
ベストアンサー1
これはかなり新しいものですが、バッシュ 4.4変数を設定できますEXECIGNORE
。
ああ。新しい変数:EXECIGNORE;コマンドを検索するときに一致するファイル名が無視されるようにするコロンで区切られたパターンのリスト。
~から公式文書:
実行を無視
コロンで区切られたシェルモードのリスト(参照パターンマッチング) PATH を使用して、コマンド検索で無視するファイル名のリストを定義します。 PATH による照会の完了とコマンドの実行のために、パス名がこれらのパターンのいずれかに一致するファイルは、実行可能とは見なされません。これは、[、test、および[[コマンドの動作には影響しません。コマンドハッシュテーブルのフルパス名には EXECIGNORE は適用されません。実行可能ビットが設定されているが実行可能ではない共有オブジェクトファイルを無視するには、この変数を使用します。パターンマッチングはextglobシェルオプションの設定に従います。
たとえば、
$ EXECIGNORE=$(which pytest)
または使用パターンマッチング:
$ EXECIGNORE=*/pytest