Wir alle wissen, wie man die <ctrl>-R
Suche im Verlauf umkehrt, aber wussten Sie, dass Sie die <ctrl>-S
Suche weiterleiten können, wenn Sie dies festlegen stty stop ""
? Haben Sie jemals versucht, bind -p auszuführen, um alle Ihre Tastaturkürzel aufgelistet zu sehen? Unter Mac OS X gibt es standardmäßig über 455.
Was ist Ihre beliebteste obskure Trick-, Tastaturkürzel- oder Shopt-Konfiguration mit Bash?
bash
command-line
Robert Harvey
quelle
quelle
Antworten:
Dateien mit Suffixen schnell umbenennen / verschieben:
cp /home/foo/realllylongname.cpp{,-old}
Dies erweitert sich auf:
cp /home/foo/realllylongname.cpp /home/foo/realllylongname.cpp-old
quelle
Dies ist das Befehlszeilenäquivalent der Schaltfläche "Zurück" (führt Sie zum vorherigen Verzeichnis, in dem Sie sich befanden).
quelle
pushd
undpopd
zu pflegen.man cd
odercd --help
(zumindest in meinem) auftaucht .Ein weiterer Favorit:
Wiederholt Ihren letzten Befehl. Am nützlichsten in der Form:
quelle
mkdir testdir; cd !$
.. Dies läuftcd [last word of previous line]
(im Beispielcd testdir
)Mein Favorit ist '^ string ^ string2', der den letzten Befehl entgegennimmt, string durch string2 ersetzt und ausführt
Bash-Befehlszeilenverlaufshandbuch
quelle
!!:gs/ehco/echo/
!!:gs/ehco/echo/
führt auf den letzten Befehl (confer eine globale Suche und ersetzen!!
in stackoverflow.com/questions/68372/... ). Das ist nicht gleichbedeutend damit,^ehco^echo
dass nur eine Instanz von "ehco" ersetzt wird - eine genauere Antwort wäre!!:s/ehco/scho
.umbenennen
Beispiel:
So nützlich
quelle
Ich bin ein Fan des
!$
,!^
und!*
ExpandOS, Rückkehr aus der letzten Kommandozeile vorgelegt: Der letzten Punkt, erstem nicht-Befehl Elemente, und alle Nicht-Befehlselemente. (Beachten Sie, dass die Shell den Befehl zuerst ausgibt):Dies ist praktisch, wenn Sie beispielsweise
ls filea fileb
einen von ihnen bearbeiten möchten:vi !$
oder beide :vimdiff !*
. Es kann auch wie folgt auf "dasn
th-Argument" verallgemeinert werden:Schließlich mit Pfadnamen, können Sie Teile des Pfads erhalten durch Anhängen
:h
und:t
einem der oben ExpandOS:quelle
Wenn ich Befehle ausführe, möchte ich manchmal einen Befehl mit den vorherigen Argumenten ausführen. Dazu können Sie diese Verknüpfung verwenden:
Gelegentlich breche ich anstelle von find eine einzeilige Schleife aus, wenn ich eine Reihe von Befehlen für eine Liste von Dateien ausführen muss.
Das Konfigurieren der Befehlszeilenverlaufsoptionen in meinem .bash_login (oder .bashrc) ist sehr nützlich. Im Folgenden finden Sie eine Reihe von Einstellungen, die ich auf meinem Macbook Pro verwende.
Wenn Sie Folgendes einstellen, löscht bash doppelte Befehle in Ihrem Verlauf:
Ich habe auch meine Geschichtsgröße ziemlich hoch gesteckt. Warum nicht? Es scheint die heutigen Mikroprozessoren nicht zu verlangsamen.
Eine andere Sache, die ich tue, ist, einige Befehle aus meinem Verlauf zu ignorieren. Sie müssen sich nicht an den Befehl exit erinnern.
Sie möchten auf jeden Fall histappend setzen. Andernfalls überschreibt bash Ihren Verlauf beim Beenden.
Eine andere Option, die ich benutze, ist cmdhist. Auf diese Weise können Sie mehrzeilige Befehle als einen Befehl im Verlauf speichern.
Schließlich möchten Sie unter Mac OS X (wenn Sie den vi-Modus nicht verwenden) <CTRL> -S vom Scroll-Stopp zurücksetzen. Dies verhindert, dass bash es als Vorwärtssuche interpretieren kann.
quelle
Wie liste ich nur Unterverzeichnisse im aktuellen auf?
Es ist ein einfacher Trick, aber Sie würden nicht wissen, wie viel Zeit ich brauchte, um diesen zu finden!
quelle
alias lsd='ls -F | grep --color /'
, dasselbe aufzulisten, aber lahmer. Es würde jedoch ein Verzeichnis pro Zeile auflisten, um das Parsen zu vereinfachen. Ich habe Ihren Befehl geändert, um dasselbe zu tun:ls -d1 */
ESC.
Fügt die letzten Argumente aus Ihrem letzten Bash-Befehl ein. Es ist nützlicher als Sie denken.
CD ESC.
quelle
Sicher, Sie können "
diff file1.txt file2.txt
", aber Bash unterstützt die Prozessersetzung , die es Ihnen ermöglichtdiff
Befehle ausgeben können.Angenommen, ich möchte sicherstellen, dass mein Skript die erwartete Ausgabe liefert. Ich kann mein Skript einfach in <() einwickeln und es füttern
diff
, um einen schnellen und schmutzigen Komponententest zu erhalten:Nehmen wir als weiteres Beispiel an, ich möchte überprüfen, ob auf zwei Servern dieselbe Liste von RPMs installiert ist. Anstatt auf jeden Server zu sshen, jede Liste von RPMs in separate Dateien zu schreiben und
diff
diese Dateien zu bearbeiten , kann ich einfach Folgendesdiff
von meiner Workstation aus tun :Weitere Beispiele finden Sie im Advanced Bash-Scripting Guide unter http://tldp.org/LDP/abs/html/process-sub.html .
quelle
Mein Lieblingsbefehl ist "ls -thor"
Es ruft die Macht der Götter dazu auf, die zuletzt geänderten Dateien in einem bequem lesbaren Format aufzulisten.
quelle
ls -bart -simpson -ruls
. S, ICNRls -lort
das dänische Wort für "Scheiße" verwenden. Auslassen von Gruppen und nicht den Zorn von Valhal bekommen :)Eher eine Neuheit, aber es ist klug ...
Top 10 verwendete Befehle:
Beispielausgabe:
quelle
history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
^ R umgekehrte Suche. Drücken Sie ^ R, geben Sie ein Fragment eines vorherigen Befehls ein, dem Sie entsprechen möchten, und drücken Sie ^ R, bis Sie den gewünschten gefunden haben. Dann muss ich mich nicht an kürzlich verwendete Befehle erinnern, die sich noch in meiner Geschichte befinden. Nicht ausschließlich bash, sondern auch: ^ E für das Zeilenende, ^ A für den Zeilenanfang, ^ U und ^ K zum Löschen vor bzw. nach dem Cursor.
quelle
Ich habe oft Aliase für vi, ls usw., aber manchmal möchten Sie dem Alias entkommen. Fügen Sie dem Befehl vorne einfach einen Schrägstrich hinzu:
Z.B:
Cool, nicht wahr?
quelle
command
sieheSHELL BUILTIN COMMANDS
im Bash-Handbuch.Hier sind einige Konfigurationsänderungen:
~/.inputrc
::Dies funktioniert genauso, verwendet
^R
jedoch stattdessen die Pfeiltasten. Dies bedeutet, dass ich (z. B.) tippen undcd /media/
dann den Aufwärtspfeil drücken kann, um zum letzten Elementcd
im/media/
Ordner zu gelangen.(Ich verwende Gnome Terminal. Möglicherweise müssen Sie die Escape-Codes für andere Terminalemulatoren ändern.)
Bash-Vervollständigung ist ebenfalls unglaublich nützlich, aber eine weitaus subtilere Ergänzung. In
~/.bashrc
:Dadurch wird die Tab-Vervollständigung pro Programm aktiviert (z. B. der Versuch, die Tabs zu vervollständigen, wenn die Befehlszeile mit beginnt
evince
, nur Dateien angezeigt, die nachweislich geöffnet werden können, und es werden auch Befehlszeilenoptionen zum Tab-Vervollständigen angezeigt).Funktioniert gut damit auch in
~/.inputrc
:quelle
Ich benutze oft Folgendes:
Der
:p
Modifikator zum Drucken eines Verlaufsergebnisses. Z.BGibt den letzten Befehl aus, damit Sie überprüfen können, ob er korrekt ist, bevor Sie ihn erneut ausführen.
!!
Geben Sie einfach ein , um es auszuführen.In ähnlicher Weise:
Durchsucht Ihren Verlauf nach dem neuesten Befehl, der die Zeichenfolge 'foo' enthält, und druckt ihn aus.
Wenn Sie nicht drucken müssen,
führt die Suche durch und führt sie sofort aus.
quelle
bind Space:magic-space # !pin<space>
Ich habe eine Geheimwaffe: Shell-Fu.
Es gibt Tausende von intelligenten Tipps, coolen Tricks und effizienten Rezepten, die meistens in eine einzelne Zeile passen.
Eine, die ich liebe (aber ich betrüge ein bisschen, da ich die Tatsache benutze, dass Python jetzt auf den meisten Unix-Systemen installiert ist):
Jedes Mal, wenn Sie "webshare" eingeben, ist das aktuelle Verzeichnis über den Port 8000 verfügbar. Sehr schön, wenn Sie Dateien ohne USB-Schlüssel oder Remote-Verzeichnis mit Freunden in einem lokalen Netzwerk teilen möchten. Das Streamen von Videos und Musik funktioniert ebenfalls.
Und natürlich die klassische Gabelbombe, die völlig nutzlos ist, aber trotzdem viel Spaß macht:
Versuchen Sie das nicht auf einem Produktionsserver ...
quelle
python -m SimpleHTTPServer
(es sei denn, ich vermisse etwas Besonderes, das der ursprüngliche Befehl tutSie können den Befehl watch in Verbindung mit einem anderen Befehl verwenden, um nach Änderungen zu suchen. Ein Beispiel hierfür war, als ich meinen Router testete und aktuelle Zahlen zu Themen wie Signal-Rausch-Verhältnis usw. erhalten wollte.
quelle
um alle Stellen zu finden, an denen PROG verfügbar ist, normalerweise irgendwo in ~ / bin und nicht in / usr / bin / PROG, die möglicherweise erwartet wurden.
quelle
PATH
, wird jeder von ihnen angezeigt.Ich konstruiere gerne Befehle mit Echo und leite sie an die Shell weiter:
Warum? Weil es mir erlaubt zu sehen, was getan wird, bevor ich es tue. Auf diese Weise kann ich einen schrecklichen Fehler (z. B. das Entfernen meines Home-Verzeichnisses) abfangen, bevor er auftritt. Dies ist natürlich am wichtigsten für destruktive oder unwiderrufliche Handlungen.
quelle
$ find dir -name \\*~ -exec rm {} +
Beim Herunterladen einer großen Datei mache ich ziemlich oft:
Und dann einfach Strg + C, wenn ich fertig bin (oder wenn
ls
ungleich Null zurückgegeben wird). Es ähnelt demwatch
Programm, verwendet jedoch stattdessen die Shell, sodass es auf Plattformen ohne funktioniertwatch
.Ein weiteres nützliches Tool ist netcat oder
nc
. Wenn Sie tun:Anschließend können Sie einen Drucker auf einem anderen Computer einrichten, aber stattdessen die IP-Adresse des Computers verwenden, auf dem Netcat ausgeführt wird. Wenn der Druckauftrag gesendet wird, wird er von dem Computer empfangen, auf dem netcat ausgeführt wird, und in den er ausgegeben wird
printjob.prn
.quelle
wget
?watch ls -la <filename>
(verwenden Sie -n5, wenn Ihnen die Standardeinstellung von 2 Sekunden nicht gefällt).watch
ist jedoch nicht auf allen Plattformen verfügbar, z. B. Solaris, Mac OS X usw. @Porges, nicht sicher, was Sie meinen. Kann wget auch einen Port abhören?pushd
undpopd
fast immer nützlich seinquelle
Eine bevorzugte Art der Navigation, wenn ich mehrere Verzeichnisse an weit voneinander entfernten Stellen in einer Baumhierarchie verwende, ist die Verwendung von acf_func.sh (siehe unten). Einmal definiert, können Sie tun
cd -
um eine Liste der letzten Verzeichnisse mit einem numerischen Menü anzuzeigen
cd -2
um zum zweitletzten Verzeichnis zu gelangen.
Sehr einfach zu bedienen, sehr praktisch.
Hier ist der Code:
quelle
Erweitern Sie komplizierte Zeilen, bevor Sie die gefürchtete Eingabe treffen
$
echo !$ !-2^ *
Alt+ Ctrl+ e$
echo aword someotherword *
Ctrl+ _$
echo !$ !-2^ *
Ctrl+ x, *$
echo !$ !-2^ LOG Makefile bar.c foo.h
& c.
quelle
Enter
:)Ich war schon immer parteiisch bei:
Ich benutze auch
shopt -s cdable_vars
, dann können Sie Bash-Variablen zu allgemeinen Verzeichnissen erstellen. Für den Quellbaum meines Unternehmens erstelle ich eine Reihe von Variablen wie:dann kann ich durch in dieses Verzeichnis wechseln
cd Dcentmain
.quelle
screen
standardmäßig auch die Escape-Taste . Ich ordne es Strg-X in meinem neu zu.screenrc
, aber dann bin ich kein Emacs-Benutzer.pbcopy
Dies wird in die Zwischenablage des Mac-Systems kopiert. Sie können Befehle an diese weiterleiten ... versuchen Sie:
pwd | pbcopy
quelle
alias pbcopy='xsel --clipboard --input'
undalias pbpaste='xsel --clipboard --output'
quelle
history 10
statthistory | tail -10
(wastail -n 10
übrigens sein sollte, da diese Syntax veraltet ist).Wenn Sie 'set -o vi' über die Befehlszeile oder besser in .bashrc verwenden, gelangen Sie in der Befehlszeile in den vi-Bearbeitungsmodus. Sie starten im Einfügemodus, damit Sie wie gewohnt tippen und die Rücktaste drücken können. Wenn Sie jedoch einen großen Fehler machen, können Sie die Esc-Taste drücken und sich dann wie in vi mit 'b' und 'f' bewegen. cw um ein Wort zu ändern. Besonders nützlich, nachdem Sie einen Verlaufsbefehl aufgerufen haben, den Sie ändern möchten.
quelle
Ähnlich wie bei vielen oben ist mein aktueller Favorit der Tastenanschlag [alt]. (Alt und "." Tasten zusammen) Dies ist das gleiche wie $! (Fügt das letzte Argument aus dem vorherigen Befehl ein), außer dass es unmittelbar und für mich einfacher zu tippen ist. (Kann einfach nicht in Skripten verwendet werden)
z.B:
quelle
Fügen Sie mehrere Befehle mit dem Befehl && zusammen :
oder
quelle