Zeigen Sie den Pushd / Popd-Stapel nicht in mehreren Bash-Skripten an (leiser Pushd / Popd).

92

Jedes Mal, wenn ich pushd oder popd verwende, wird der Stapel auf die Standardausgabe gedruckt. Wie nicht?

Ich möchte das nicht pushd > /dev/nulljedes Mal tun, weil ich viele Skripte habe, die sich gegenseitig aufrufen.

Vielleicht reicht eine nette Überschreibung aus, aber ich muss diese integrierten Funktionen nur in meinen Skripten überschreiben und dann das richtige Verhalten wiederherstellen.

bemug
quelle
2
Wenn jemand kommt , um diese Frage über will ein einzelnes Auftreten zum Schweigen zu bringen können Sie ersetzen pushdund popdmit cdund cd ~-. ~-ist eine Tilde-Erweiterung , die auf $ OLDPWD gesetzt ist .
Agustín Lado
@ AgustínLado cd -funktioniert auch. Ich bin mir nicht sicher, welche Version mit einer Vielzahl von Systemen kompatibler ist.
Shiplu Mokaddim
1
@ShipluMokaddim: Ohne Tilde wird der Ordnername gedruckt (zumindest unter Ubuntu 18.04 unter WSL).
Astraujums

Antworten:

132

Sie könnten hinzufügen

pushd () {
    command pushd "$@" > /dev/null
}

popd () {
    command popd "$@" > /dev/null
}

an die Spitze jedes Skripts. Dies ist wahrscheinlich der Mindestaufwand für die Lösung Ihres Problems.

chepner
quelle
Genau das, was ich brauchte ... Danke!
RonzyFonzy
Wenn Sie auch Fehler zum Schweigen bringen möchten (z. B. kein solches Verzeichnis), können Sie &>anstelle von>
MattSturgeon
4
Seien Sie vorsichtig, wenn Sie Fehler stummschalten: Sie können zu einem späteren Zeitpunkt einen schwer zu diagnostizierenden Fehler erstellen. Stellen Sie sicher, dass Sie nach einem nicht in Ordnung befindlichen Rückkehrcode suchen und entsprechend reagieren.
David Spillett
Dies ist die am wenigsten invasive Option.
PuzzledVacuum
Sie können set -eam Anfang beider Funktionen und set +eam Ende oder nur set -eam Anfang des Skripts hinzufügen , um das Skript zu beenden, wenn ein Exit-Code! = 0 gefunden wird. Dies funktioniert auch im Shebang, z #!/bin/bash -e. Quelle: gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
xdevs23
4

In zsh können Sie setopt PUSHDSILENT. Setzen Sie dies in Ihre ~/.zshrc.

Michael Deardeuff
quelle
1
Oder verwenden Sie popd -q(leise).
rxw
4
Popd hat keine -qOption
MarekN
1
@MarekN: Der vorherige Kommentar von "popd -q" bezog sich auf zsh, nicht auf bash, obwohl die ursprüngliche Frage so markiert war, dass sie bash-Antworten wollte, nicht zsh.
B-Jazz
Dies ist ein netter Kommentar oder eine Tangente an eine Antwort, aber er gehört nicht als eigenständige Antwort auf eine Frage, nach der nicht gefragt wird zsh.
Chepper
3

Fügen Sie in Ihrer .profile-Datei (wie auch immer sie in Ihrem System heißt) Folgendes hinzu:

pushd () {
    command pushd "$@" > /dev/null
}

popd () {
    command popd "$@" > /dev/null
}

export pushd popd
Bozon
quelle
12
Dies betrifft das gesamte System ... persönlich empfehle ich diesen Weg nicht. .
Sean83