Ich habe gerade mein Ubuntu 16.04 auf 17.04 aktualisiert und ein kleines Problem mit dem cd
Befehl gefunden.
Angenommen, ich habe zwei Ordner: album-01
&album-02
Wenn ich cd album*
es in Ubuntu 16.04 mache , wird es in den ersten gefundenen Ordner verschobenalbum-01
Aber in neuem Ubuntu 17.04, wenn ich es tue cd album*
, resultiere ich
-bash: cd: too many arguments
Wie mache ich cd
in Ubuntu 17.04 wie cd
in Ubuntu 16.04?
command-line
bash
cd-command
Hidayats
quelle
quelle
cd
zwei Standorte angeben und irgendwie erwarten, dass es herausfindet, welchen Sie möchten.Antworten:
Ich konnte dies noch nicht auf einem echten 17.04-System testen (nur überprüft, ob es unter 16.04 funktioniert), aber Sie sollten in der Lage sein, den integrierten
cd
Bash-Befehl mit Ihrer eigenen benutzerdefinierten Funktion zu überschreiben , die alle zusätzlichen Argumente außer dem ersten verwirft ::Update: Wie in @ murus Kommentar vorgeschlagen, funktioniert diese Version möglicherweise besser und unterstützt das Aufrufen
cd
ohne Argumente:Nachdem Sie diese Zeile oben in Ihrem Terminal eingegeben haben, überprüfen Sie bitte, ob Sie sich
cd
jetzt wie gewünscht verhalten. In diesem Fall können Sie diese Funktionsdefinition dauerhaft machen, indem Sie diese Zeile an das Ende Ihrer~/.bashrc
Datei anhängen . Andernfalls verschwindet es, sobald Sie Ihre aktuelle Shell-Sitzung beenden.Beachten Sie, dass Sie, wenn Sie aus irgendeinem Grund vorübergehend den echten integrierten
cd
Bash-Befehl anstelle dieser benutzerdefinierten Funktion verwenden müssen, ihn einfach mitcommand cd
statt einfach aufrufen könnencd
.quelle
.sh
Dateimcd="source /home/user/bin/cd.sh"
cd () { builtin cd "${@:1:1}"; }
stattdessen.Kurze Antwort / Problemumgehung
Um Ihre Frage genau in diesem Fall zu beantworten, funktioniert dies
Aber es ist wahrscheinlich nicht die Funktionalität, die Sie wirklich wollen.
Was hat sich geändert?
Es scheint, dass
config-top.h
in Bash-4.4 die folgende Option hinzugefügt wurdeUnd
builtins/cd.def
verweist hier auf Ihren Fehler:Was kann ich langfristig tun?:
Sie könnten Ihre eigenen
bash
ohne die neuen CD_COMPLAINS kompilieren , aber das würde mühsam werden. Sie können diecd
hier vorgeschlagene Funktionalität neu definieren oder eine Funktion wieEs zu beweisen
Bash 4.4 Beta, wo es noch funktioniert
Bash 4.4 Stable Release, wo es nicht funktioniert
quelle
cd alb*1
, um das Literal1
am Ende auch ohne die Klammern abzugleichen. Ich habe Ihre Idee zuerst mit etwas anderem verwechselt.Ich bin auf dieses Problem noch nie gestoßen, da ich immer Tab Completion verwende.
In Ihrem Fall würde ich also, anstatt eine ungenaue Vermutung darüber zu haben, welches Verzeichnis ich möchte, welches eingeben,
cd al
Tabwenn es nur eine Übereinstimmung gibt, diese vervollständigt und wenn es zwei oder mehr Vervollständigungen gibt, bis die Übereinstimmung endet und TabTabdie Auswahlmöglichkeiten auflistet.Hier ist ein Beispiel aus meinem System:
cd Un
Tabgefolgt von TabTabproduziert
quelle
Dies sieht aus wie ein Fehler in Bash: Nach
man builtins
dem alten Verhalten ist das richtige.Sie können den Fehler auf der
bug-bash
Mailingliste melden . Weitere Details hier .Eigentlich wurde der Fehler gemeldet (vor langer Zeit). Wenn Sie jetzt, jetzt, jetzt einen festen Bash möchten , gehen Sie wie folgt vor (wie am 17.10 getestet, sollte auch bei anderen funktionieren).
Erstellen Sie zunächst ein Verzeichnis, in dem Sie arbeiten möchten, zum Beispiel:
Holen Sie sich das Quellpaket und die Build-Abhängigkeiten:
Bearbeiten
config-top.h
, um dies zu ändern (sollte Zeile 32 sein)dazu
Bearbeiten
debian/changelog
und fügen Sie oben einen Eintrag wie diesen hinzu (Sie können auch den Befehl verwendendch -i
):Die wichtigsten Punkte sind das Anhängen
+foo
an die aktuelle Versionsnummer (foo
kann eine beliebige Folge von Kleinbuchstaben sein; und seien Sie vorsichtig, wenn Sie diese verwendendch -i
, wird die letzte Nummer erhöht, sodass Sie sie auf die aktuelle zurücksetzen müssen) und verwenden Sie die korrekter Release-Name (artful
hier). Zum Schluss laufendpkg-source --commit
.Sie können dann den
debuild
Befehl ausführen , und wenn alles gut geht (Fehlerdebsign
können ignoriert werden), sollten Sie einige.deb
s im übergeordneten Verzeichnis haben, die Sie wie gewohnt installieren können (es ist nicht erforderlich, alle zu installieren, nur die, die Sie haben habe jetzt; benutzedpkg -l | grep bash
um es herauszufinden).Beachten Sie, dass die Versionsnummer des neuen Pakets so festgelegt ist, dass Sie bei zukünftigen Updates automatisch auf erhalten
bash
. Wenn das Update das Problem nicht behebt, müssen Sie den obigen Vorgang wiederholen.(Diese Antwort wurde zuerst auf diese doppelte Frage gestellt .)
quelle