Bashが完了したら、いくつかのコマンドを非表示にしますか?

Bashが完了したら、いくつかのコマンドを非表示にしますか?

Bashに次のコマンドがあるとしましょう。

$ pyt[TAB][TAB]
pytest
python
python-config
python-dbg

99%を選択してくださいpython。あまりにも迷惑なので、電話をかけるためにpytestタイピングができなくなります。 Bashの完了を隠すことはできますか?pyt[TAB][RETURN]pythonpytest

私の限界:

  1. bashでこの提案が発生しないようにpytestatバイナリを削除できることを知っています。/usr/bin/pytestしかし、rootアクセス権がない場合はどうなりますか?pytest他のスクリプトが正しく機能するために重要なスクリプトが必要な場合はどうなりますか?

  2. pytestバイナリを削除することはできますが(以前にこれを行ったことがあります)、時にはソフトウェアをアップグレードするとこのスクリプトが再び表示されます。

  3. alias私は好きなアプリのキーストロークを保存するために使用できることを知っていpますpython。しかし、私はこれらの非標準的な略語が好きではありません。リモートで別のコンピュータに接続すると、これが私を混乱させます。

それでは、Bashの完了時に特定のコマンドを非表示にする方法はありますか?最近のbashのために作業速度が上がらなかったので、他のシェル(zsh、fishな​​ど)を使った答えを歓迎します。

ベストアンサー1

これはかなり新しいものですが、バッシュ 4.4変数を設定できますEXECIGNORE

ああ。新しい変数:EXECIGNORE;コマンドを検索するときに一致するファイル名が無視されるようにするコロンで区切られたパターンのリスト。

~から公式文書:

実行を無視

コロンで区切られたシェルモードのリスト(参照パターンマッチング) PATH を使用して、コマンド検索で無視するファイル名のリストを定義します。 PATH による照会の完了とコマンドの実行のために、パス名がこれらのパターンのいずれかに一致するファイルは、実行可能とは見なされません。これは、[、test、および[[コマンドの動作には影響しません。コマンドハッシュテーブルのフルパス名には EXECIGNORE は適用されません。実行可能ビットが設定されているが実行可能ではない共有オブジェクトファイルを無視するには、この変数を使用します。パターンマッチングはextglobシェルオプションの設定に従います。

たとえば、

$ EXECIGNORE=$(which pytest)

または使用パターンマッチング:

$ EXECIGNORE=*/pytest

おすすめ記事