72 Stimmen

Versteckte Funktionen der Bash

Shell-Skripte werden oft als Klebstoff für die Automatisierung und einfache einmalige Aufgaben verwendet. Was sind Ihre bevorzugten "versteckten" Funktionen der Shell/Skriptsprache Bash?

  • Ein Merkmal pro Antwort
  • Geben Sie ein Beispiel und eine kurze Beschreibung der Funktion, nicht nur einen Link zur Dokumentation
  • Beschriften Sie das Merkmal mit einem fettgedruckten Titel in der ersten Zeile

Siehe auch:

4voto

Greg Hewgill Punkte 882617

Ich habe kürzlich gelesen Csh-Programmierung gilt als schädlich die dieses verblüffende Kleinod enthielt:

Denken Sie an die Pipeline:

A | B | C

Wenn Sie den Status von C wissen wollen, nun, das ist einfach: Er steht in $? oder $status in csh. Aber wenn Sie ihn von A wissen wollen, haben Sie Pech - wenn Sie in der csh sind, das heißt. In der Bourne-Shell können Sie es bekommen, obwohl aber das ist ein bisschen knifflig. Hier ist etwas, das ich tun musste, als ich dd's stderr in eine grep -v Pipe geleitet habe, um das Rauschen der Datensätze loszuwerden, aber ich musste den Exit-Status von dd zurückgeben, nicht den von grep:

device=/dev/rmt8
dd_noise='^[0-9]+\+[0-9]+ records (in|out)$'
exec 3>&1
status=`((dd if=$device ibs=64k 2>&1 1>&3 3>&- 4>&-; echo $? >&4) |
    egrep -v "$dd_noise" 1>&2 3>&- 4>&-) 4>&1`
exit $status;

4voto

neurolabs Punkte 530

Eine weitere kleine: Alt + #

kommentiert die aktuelle Zeile aus und verschiebt sie in den History-Puffer.

Wenn Sie also eine Befehlszeile zusammenstellen und einen Zwischenbefehl eingeben müssen, um z. B. eine Datei zu finden, drücken Sie einfach alt+#, geben den anderen Befehl ein, gehen im Verlauf nach oben, heben die Kommentierung auf und fahren fort.

4voto

Agos Punkte 17497

Nicht wirklich ein Merkmal, sondern eher eine Richtung: Ich fand viele "versteckte Funktionen", Geheimnisse und verschiedene Bash-Nutzbarkeiten unter commandlinefu.com . Viele der am höchsten bewerteten Antworten auf diese Antworten, lernte ich sie auf dieser Website :)

3voto

René Nyffenegger Punkte 37584

set -o vi um eine vi-ähnliche Bearbeitung der Befehlshistorie sowie des aktuell eingegebenen Befehls zu ermöglichen.

3voto

David Plumpton Punkte 1908

Einfacher Wechsel zwischen mehreren Verzeichnissen

Dies ist keine versteckte Funktion, aber viel flexibler als pushd, das eine stapelartige Navigation erfordert.

a() { alias $1=cd\ $PWD; }

cd irgendwo und Typ a 1 . Später nur noch tippen 1 kehrt in dieses Verzeichnis zurück.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X