Bash 4.3 "Multiple Dot" -Befehle schlagen unter Fedora stillschweigend fehl

7

Ich habe dies gerade bei Bash 4.3 notiert. Die genaue Versionsnummer lautet 4.3.42 (1) -release (x86-redhat-linux-gnu).

$ ..
$ ...
$ ....
$ .....

Warum wird der "Befehl nicht gefunden" nicht angefordert?

$ ...
$ echo $? 
$ 127

Ich überprüfte das $PATHund das aliasNichts; Der Mann hilft auch nicht.
Die Bash läuft unter Fedora Linux, aber ich denke, es hängt nicht mit dem Betriebssystem zusammen.

BEARBEITEN

Ich habe dies nur für jeden Punktstartbefehl gleich notiert

.za
.zaza
..za
..zaza
Emmanuel
quelle
Wenn Sie das tun, bekommen Sie überhaupt eine Antwort?
John Militer
@ John Ja, es ist so, als hätte ich hier gepostet. Auf meinen Computern habe ich traditionell den Alias ​​"..." verwendet, um dies zu sudo -svergessen. So habe ich es entdeckt.
Emmanuel
Funktioniert wie erwartet unter Debian 4.3.42 (1) -Veröffentlichung. Hast du eine command_not_found_handlefunktion
Derobert

Antworten:

9

Dies wurde durch die in Fedora nicht gefundene Behandlung verursacht.

Das Ausführen eines unbekannten Befehls (einschließlich ...usw., wenn kein Alias ​​übereinstimmt) führt command_not_found_handledazu, dass der fehlende Befehl als Parameter ausgeführt wird (siehe /etc/profile.d/PackageKit.shDefinition). In dem gegebenen Szenario wird der Handler dann /usr/libexec/pk-command-not-founderneut mit dem fehlenden Befehl als Parameter ausgeführt. Bisher wurden alle Befehle, die mit : beginnen , pk-command-not-foundeinfach ignoriert..

if (argv[1][0] == '.')
    goto out;

und mit Code 127 beendet.

Dieses Verhalten wurde eingeführt , um Red Hat # 1151185 zu beheben. Es wird auch darauf verwiesen, dass Bash bei nicht vorhandenen Befehlen, die mit dot beginnen , keine Fehlermeldung ausgibt und einen Fehler aufweist, der eine Korrektur anfordert ( Red Hat # 1292531 ). Es wurde größtenteils in FC 27 mit Updates behoben, seit PackageKit 1.1.8 (siehe dieses Commit ): Jetzt werden Befehle mit führenden Punkten nur verarbeitet .und ..ignoriert.

Stephen Kitt
quelle
Vielen Dank, ich denke, ich werde in Betracht ziehen, eine andere Shell zu verwenden.
Emmanuel
@Emmanuel oder Sie könnten einfach Fedoras kaputten Befehl-nicht-gefundenen Handler mit etwas wie unset -f command_not_found_handlein Ihrem ~ / .bashrc deaktivieren. Oder deinstallieren Sie das Fedora-Paket, das die Funktion "Befehl nicht gefunden" bietet (auf Debian führe ich apt-get purge command-not-foundjede Debian-Box aus, die ich erstelle. Ich mache dasselbe für das bash-completionPaket. Beide sind weitaus ärgerlicher als jeder Vorteil, den sie bringen)
cas
Beachten Sie, dass dieser Fehler jetzt behoben ist.
Mattdm
@ StephenKitt Hmmm, komisch. Nicht bei mir. Ich bekomme in den meisten Beispielfällen "Befehl nicht gefunden" und zusätzlich Similar command is: '..'mit ....
Mattdm
Wenn Sie Ihrem Github-Link in Ihrer Antwort folgen, wird jetzt ein fester Code angezeigt. Dieses Commit von vor zwei Monaten hat es geschafft - anstatt nur nach einem Start zu suchen ., wird explizit nach .und gesucht ...
Mattdm