
Es gibt eine wirklich praktische Funktion zur Parameter-/Variablenerweiterung in BASH, die ich für den Verlauf nicht sehe. Ich habe die Manpages für den Verlauf und für BASH selbst überprüft. Nicht da ... vielleicht habe ich es übersehen.
Beispiel: Ich verwende SSH häufig und kann dies mit variabler Erweiterung tun.
[email protected]
Angenommen, ich möchte nur den Host extrahieren – oder besser gesagt den Benutzernamen entfernen.
hostonly=${host##*@}
Wenn ich
echo $hostonly
Ich bekomme:
bar.org
Meine Frage: Ist dies mit dem Befehlszeilenverlauf möglich?
z.B.,
Befehl 1:
ssh [email protected]
Befehl 2:
ssh gary@!!:##*@
Das funktioniert natürlich nicht, aber kann jemand bestätigen, ob diese Art der Musterübereinstimmung verfügbar ist oder nicht?
Danke!
Bubnoff
Antwort1
Ein cleverer Trick, der oft übersehen wird, ist der r
Befehl (der selbst ein Sonderfall des fc
Befehls ist):
$ ssh [email protected]
(...)
$ r foo=baz
Der allgemeinere Fall ist
$ fc -s foo=bar ssh
Damit können Sie einen Befehl aus dem Verlauf nach Teilzeichenfolge auswählen, dann die angegebene Ersetzung vornehmen und ihn ausführen. Wenn Sie das weglassen -s
, wird der Befehl $EDITOR
für komplexere Änderungen in geladen. Durch die Bearbeitung der Befehlszeile ist dies meist nicht erforderlich, es gibt jedoch einige Bearbeitungen, die in der Befehlszeile schwierig durchzuführen sind.
Sie können auch relativ komplexe Manipulationen mithilfe !
der History-Referenzsyntax durchführen, aber aus historischen Gründen (der grundlegende History-Mechanismus wurde bereits früh eingeführt csh
und alle Erweiterungen haben die Kompatibilität größtenteils beibehalten) wird eine andere Syntax verwendet. SieheHierfür Details.
Antwort2
$ ssh [email protected]
...
$ ^foo^gary^
...
Der Befehl wird wiederholt, wobei als Benutzername „gary“ anstelle von „foo“ verwendet wird. Das Folgende funktioniert genauso:
$ ssh [email protected]
...
$ !!:s/foo/gary/
...