Einige Befehle vor dem Bash-Abschluss verbergen?

9

Angenommen, ich habe in bash die folgenden Befehle:

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

99% der Zeit würde ich gehen python. Es ist so nervig, dass es pytestauftaucht und mich daran hindert, nur pyt[TAB][RETURN]zum Aufrufen zu tippen python. Kann ich mich vor pytestdem Abschluss der Bash verstecken ?

Meine Einschränkungen:

  1. Ich weiß, dass ich die pytestBinärdatei bei entfernen kann, /usr/bin/pytestum diesen Vorschlag innerhalb von Bash zu verhindern. Aber was ist, wenn ich keinen Root-Zugriff habe? Was ist, wenn pytestein wichtiges Skript vorhanden sein muss, damit andere Skripte ordnungsgemäß funktionieren?

  2. Obwohl ich die pytestBinärdatei entfernen kann (und das habe ich bereits getan), wird dieses Skript einige Zeit nach dem Upgrade meiner Software wieder angezeigt.

  3. Ich weiß, dass ich aliasmit a Tastenanschläge für meine Lieblingsanwendungen speichern kann (vielleicht nur pfür python). Aber ich mag diese nicht standardmäßigen Abkürzungen nicht. Es macht mich irgendwie verwirrt, wenn ich mich von anderen Maschinen fernhalte.

Gibt es eine Möglichkeit, einige Befehle vor dem Bash-Abschluss zu verbergen? Antworten in anderen Shells (zsh, fish usw.) sind willkommen, da Bash meinen Workflow in letzter Zeit nicht beschleunigt.

Neizod
quelle

Antworten:

13

Dies ist ziemlich neu, aber in Bash 4.4 können Sie die EXECIGNOREVariable festlegen :

aa. Neue Variable: EXECIGNORE; Eine durch Doppelpunkte getrennte Liste von Mustern, die dazu führen, dass übereinstimmende Dateinamen bei der Suche nach Befehlen ignoriert werden.

Aus der offiziellen Dokumentation :

EXECIGNORE

Eine durch Doppelpunkte getrennte Liste von Shell-Mustern (siehe Pattern Matching ), die die Liste der Dateinamen definiert, die bei der Befehlssuche mit PATH ignoriert werden sollen. Dateien, deren vollständige Pfadnamen mit einem dieser Muster übereinstimmen, werden für die Vervollständigung und Befehlsausführung über die PATH-Suche nicht als ausführbare Dateien betrachtet. Dies hat keinen Einfluss auf das Verhalten der Befehle [, test und [[. Vollständige Pfadnamen in der Befehls-Hash-Tabelle unterliegen nicht EXECIGNORE. Verwenden Sie diese Variable, um gemeinsam genutzte Bibliotheksdateien zu ignorieren, für die das ausführbare Bit gesetzt ist, die jedoch keine ausführbaren Dateien sind. Der Mustervergleich berücksichtigt die Einstellung der Extglob-Shell-Option.

Zum Beispiel:

$ EXECIGNORE=$(which pytest)

Oder verwenden Sie Pattern Matching :

$ EXECIGNORE=*/pytest
zuazo
quelle
Arbeite wie ein Zauber!
Neizod
Weitere Informationen zum Anhängen an eine Systemvariable und zum Beibehalten des Variableninhalts beim Neustart finden Sie unter Hinzufügen zum Pfad .
Enharmonic