Suche…


Einrücken von Dokumenten hier

Sie können den Text in den hier enthaltenen Dokumenten mit Registerkarten einrücken. Sie müssen den <<- Umleitungsoperator anstelle von << :

$ cat <<- EOF
    This is some content indented with tabs `\t`.
    You cannot indent with spaces you __have__ to use tabs.
    Bash will remove empty space before these lines.
    __Note__: Be sure to replace spaces with tabs when copying this example.
EOF

This is some content indented with tabs _\t_.
You cannot indent with spaces you __have__ to use tabs.
Bash will remove empty space before these lines.
__Note__: Be sure to replace spaces with tabs when copying this example.

Ein praktischer Anwendungsfall (wie in man bash ) sind Shell-Skripte, zum Beispiel:

if cond; then
    cat <<- EOF
    hello
    there
    EOF
fi

Es ist üblich, die Zeilen innerhalb der Codeblöcke wie in dieser if -Anweisung einzurücken, um die Lesbarkeit zu verbessern. Ohne die <<- Operator-Syntax würden wir den obigen Code wie folgt schreiben:

if cond; then
    cat << EOF
hello
there
EOF
fi

Das ist sehr unangenehm zu lesen und wird in einem komplexeren realistischen Skript viel schlimmer.

Hier Zeichenketten

2,05b

Sie können einen Befehl mit folgenden Zeichenfolgen eingeben:

$ awk '{print $2}' <<< "hello world - how are you?"
world

$ awk '{print $1}' <<< "hello how are you
> she is fine"
hello
she

Sie können eine while Schleife auch mit einem Here-String füttern:

$ while IFS=" " read -r word1 word2 rest
> do
> echo "$word1"
> done <<< "hello how are you - i am fine"
hello

Zeichenketten begrenzen

Ein Heredoc verwendet die Begrenzungszeichenfolge , um zu bestimmen, wann aufgehört wird , Eingaben zu verbrauchen. Die Abschlussbegrenzung muss

  • Sei am Anfang einer Zeile.
  • Seien Sie der einzige Text in der Zeile Hinweis: Wenn Sie <<- verwenden, können Tabulatoren \t der Begrenzungszeichenfolge vorangestellt werden

Richtig:

cat <<limitstring
line 1
line 2
limitstring

Dies wird ausgegeben:

line 1
line 2

Falsche Verwendung:

cat <<limitstring
line 1
line 2
 limitstring

Da sich limitstring in der letzten Zeile nicht genau am Zeilenanfang befindet, wartet die Shell weiter auf weitere Eingaben, bis sie eine Zeile sieht, die mit limitstring beginnt und nichts anderes enthält. Erst dann wird auf Eingaben gewartet und das Here-Dokument an den cat Befehl übergeben.

Wenn Sie dem anfänglichen Grenzwertstring einen Bindestrich voranstellen, werden alle Tabulatoren am Zeilenanfang vor der Analyse entfernt, sodass die Daten und der Grenzwertstring mit Tabulatoren eingerückt werden können (zum leichteren Lesen in Shell-Skripts).

cat <<-limitstring
        line 1    has a tab each before the words line and has
            line 2 has two leading tabs
        limitstring

wird herstellen

line 1    has a tab each before the words line and has
line 2 has two leading tabs

wobei die führenden Tabs (aber nicht die internen Tabs) entfernt wurden.

Erstellen Sie eine Datei

Eine klassische Verwendung dieser Dokumente besteht darin, eine Datei durch Eingabe ihres Inhalts zu erstellen:

cat > fruits.txt << EOF
apple
orange
lemon
EOF

Das Here-Dokument enthält die Zeilen zwischen << EOF und EOF .

Dieses Dokument wird zur Eingabe des cat Befehls. Der Befehl cat gibt einfach seine Eingabe aus, und mit dem Operator für die Umleitung von Ausgaben > wir zu einer Datei fruits.txt umgeleitet.

Als Ergebnis enthält die fruits.txt Datei die Zeilen:

apple
orange
lemon

Es gelten die üblichen Regeln für die Ausgabeumleitung: Wenn fruits.txt noch nicht vorhanden war, wird sie erstellt. Wenn es vorher existiert hat, wird es abgeschnitten.

Befehl mit diesem Dokument ausführen

ssh -p 21 [email protected] <<EOF
  echo 'printing pwd'
  echo "\$(pwd)"
  ls -a
  find '*.txt'
EOF

$ wird mit Escapezeichen versehen, weil wir nicht möchten, dass es durch die aktuelle Shell erweitert wird, dh, $(pwd) wird auf der Remote-Shell ausgeführt.

Ein anderer Weg:

ssh -p 21 [email protected] <<'EOF'
  echo 'printing pwd'
  echo "$(pwd)"
  ls -a
  find '*.txt'
EOF    

Hinweis : Das schließende EOF sollte am Anfang der Zeile stehen (vorher keine Leerzeichen). Wenn eine Einrückung erforderlich ist, können Registerkarten verwendet werden, wenn Sie Ihr Heredoc mit <<- . Siehe die Einrücken hier Dokumente und Limit - Strings Beispiele für weitere Informationen.

Führen Sie mehrere Befehle mit Sudo aus

sudo -s <<EOF
  a='var'
  echo 'Running serveral commands with sudo'
  mktemp -d
  echo "\$a"
EOF
  • $a muss mit Escapezeichen versehen werden, um zu verhindern, dass es von der aktuellen Shell erweitert wird

Oder

sudo -s <<'EOF'
  a='var'
  echo 'Running serveral commands with sudo'
  mktemp -d
  echo "$a"
EOF


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow