Versuchen Sie, Folgendes unter einer Bash-Shell auszuführen echo "Reboot your instance!"
Auf meiner Installation:
root@domU-12-31-39-04-11-83:/usr/local/bin# bash --version
GNU bash, version 4.1.5(1)-release (i686-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
root@domU-12-31-39-04-11-83:/usr/local/bin# uname -a
Linux domU-12-31-39-04-11-83 2.6.35-22-virtual #35-Ubuntu SMP Sat Oct 16 23:57:40 UTC 2010 i686 GNU/Linux
root@domU-12-31-39-04-11-83:/usr/local/bin# echo "Reboot your instance!"
-bash: !": event not found
Kann mir jemand bitte erklären, was "bash events" sind? Ich habe dieses Konzept noch nie gehört. Wie soll ich auch "!" am Ende des Satzes?
+H
etwas-H
eingeben , um etwas zu aktivieren und zu deaktivieren.+
sind einfach das Gegenteil davon.!
ist ein spezielles Zeichen, mit dem auf frühere Befehle verwiesen wird. z.B,ruft den letzten Befehl auf, der mit der Zeichenfolge "rm" und "rm" begann, und führt ihn aus
ruft den letzten Befehl auf, der mit der Zeichenfolge "rm" begonnen hat, führt ihn jedoch nicht aus. bash interpretiert das Ausrufezeichen in
echo "reboot your instance!"
als „ Ersatz hier den letzten Befehl, der mit dem Buchstaben begann (s) unmittelbar nach dem Ausrufezeichen “, und schimpft auf Dich , dass es kein Ereignis (Befehl) in Ihrer Geschichte finden kann , die mit einem einzigen begannen doppelte Anführungszeichen.Versuchen
das Ausrufezeichen vor Bash schützen.
quelle
Verwenden Sie einfache Anführungszeichen anstelle von doppelten Anführungszeichen, um Ihr ursprüngliches Problem zu lösen. Bei letzterem versucht bash, bestimmte Zeichen zu erweitern, bevor das Ergebnis an den Befehl übergeben wird (in diesem Fall Echo). Mit einfachen Anführungszeichen übergibt bash die gesamte Zeichenfolge unverändert.
!
wird in Befehlen verwendet, um auf den Befehlszeilenverlauf zu verweisen. Siehe: http://tldp.org/LDP/abs/html/abs-guide.html#HISTCOMMANDS für einen vollständigen Satz. Im obigen Beispiel versucht bash,!"
als Referenz auf ein Ereignis zu expandieren, bevor das Echo einen Einblick erhält, daher der Fehler.Beachten Sie, dass in Skripten alle Verlaufsbefehle deaktiviert sind, da sie nur in einer interaktiven Shell sinnvoll sind.
Das einzige, das ich regelmäßig benutze, ist
!$
. Es wird bis zum letzten Argument des vorherigen Befehls erweitert. Es ist eine nützliche Abkürzung.quelle
!!
Es ist bemerkenswert nützlich, den zuletzt eingegebenen Befehl vollständig auszufüllen. insbesonderesudo !!
oderpfexec !!
$_
funktioniert in mehr Shells als Bash und ist im Gegensatz dazu eine richtige Variable!$
. (und @LeartS: Ich mochte den Mangel an Emoticons deines Witzes.;))Setzen Sie einfach ein Leerzeichen dazwischen! und "dann klappt es.
Prost.
quelle
Ja, ! ist ein Sonderzeichen, mit dem auf frühere Befehle verwiesen wird.
Nur wenige Möglichkeiten, mit der Situation umzugehen
Das Folgende gibt die Zeichenfolge so aus, wie sie ist
Der folgende Befehl führt den Befehl aus und verkettet die Zeichenfolge
quelle
In
bash 4.3
scheint es brauchen Sie nicht mehr einfache Anführungszeichen zu verwenden , oderset +H
:quelle
set +H
oder zitiere. Oder Sie habenset +H
irgendwo (wie in/etc/profile
).Du könntest auch einen Heredoc benutzen :
Es ist in diesem Fall ärgerlich, weil es kein Einzeiler ist, aber für längere Befehle (wie das Schreiben eines Bash-Skripts) funktioniert es großartig.
quelle