Sie können die Verwendung von Erweiterungen mit Bookmarklets vermeiden. Ein Bookmarklet ist ein Browser-Bookmark, das eine Webseite nicht wirklich öffnet, sondern ein Stück Javascript ausführt. Bookmarklets verwenden das javascript:
Pseudoprotokoll.
Erstellen Sie beispielsweise ein Lesezeichen mit dieser URL:
javascript:(function() 2>/dev/null; echo_and_restore "Command failed!"
und du hast es erraten, echo_and_restore
wird immer bedingungslos hingerichtet . Da das set +x
Teil nicht ausgeführt wurde, wird auch der Inhalt dieser Funktion gedruckt.
Die letzten ändern funktionieren würde auch nicht, weil in Bash, und sind linksassoziativ .;
&&
||
&&
Ich habe eine Modifikation gefunden, die für diesen Anwendungsfall funktioniert:
echo_and_restore() { echo "$(cat -)" case "$save_flags" in (*x*) set -x esac } alias echo='({ save_flags="$-"; set +x; } 2>/dev/null; echo_and_restore) <<<'
Es verwendet eine Subshell (das (...)
Teil), um alle Befehle zu gruppieren, und übergibt dann den Eingabestring über stdin als Here-String (das <<<
Ding), das dann gedruckt wird cat -
. Das -
ist optional, aber Sie wissen, " explizit ist besser als implizit ".
Sie cat -
können das Echo auch direkt verwenden, aber ich mag diesen Weg, weil ich beliebige andere Zeichenfolgen zur Ausgabe hinzufügen kann. Zum Beispiel neige ich dazu, es so zu verwenden:
BASENAME="$(basename "$0")" # Complete file name ... echo "[$] $(cat -)"
Und jetzt funktioniert es wunderbar:
false || echo "Command failed" > [test.sh] Command failed