GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kate <<EOF >> eine Datei, die Code enthält?

Das sollte funktionieren, ich habe es gerade getestet und es hat wie erwartet funktioniert:Es hat keine Erweiterung, Substitution oder was-hast-du stattgefunden.

cat <<< '
#!/bin/bash
curr=`cat /sys/class/backlight/intel_backlight/actual_brightness`
if [ $curr -lt 4477 ]; then
  curr=$((curr+406));
  echo $curr  > /sys/class/backlight/intel_backlight/brightness;
fi' > file # use overwrite mode so that you don't keep on appending the same script to that file over and over again, unless that's what you want. 

Folgendes funktioniert auch.

cat <<< ' > file
 ... code ...'

Beachten Sie auch, dass bei der Verwendung von Heredocs wie << EOF , Substitution und Variablenexpansion und dergleichen stattfinden. Also etwas wie folgt machen:

cat << EOF > file
cd "$HOME"
echo "$PWD" # echo the current path
EOF

führt immer zur Erweiterung der Variablen $HOME und $PWD . Wenn Ihr Home-Verzeichnis also /home/foobar ist und der aktuelle Pfad ist /home/foobar/bin , file sieht so aus:

cd "/home/foobar"
echo "/home/foobar/bin"

statt wie erwartet:

cd "$HOME"
echo "$PWD"

Sie brauchen nur eine minimale Änderung; Setzen Sie das Here-Document-Trennzeichen nach << in einfache Anführungszeichen .

cat <<'EOF' >> brightup.sh

oder äquivalent Backslash-Escape:

cat <<\EOF >>brightup.sh

Ohne Anführungszeichen wird das Here-Dokument einer Variablensubstitution unterzogen, Backticks werden ausgewertet usw., wie Sie festgestellt haben.

Wenn Sie einige, aber nicht alle Werte erweitern müssen, müssen Sie diejenigen, die Sie verhindern möchten, einzeln maskieren.

cat <<EOF >>brightup.sh
#!/bin/sh
# Created on $(date # : <<-- this will be evaluated before cat;)
echo "\$HOME will not be evaluated because it is backslash-escaped"
EOF

wird produzieren

#!/bin/sh
# Created on Fri Feb 16 11:00:18 UTC 2018
echo "$HOME will not be evaluated because it is backslash-escaped"

Wie von @fedorqui vorgeschlagen, ist hier der relevante Abschnitt von man bash :

Hier Dokumente

Diese Art der Umleitung weist die Shell an, Eingaben aus der aktuellen Quelle zu lesen, bis eine Zeile zu sehen ist, die nur Trennzeichen (ohne abschließende Leerzeichen) enthält. Alle bis dahin gelesenen Zeilen werden dann als Standardeingabe für einen Befehl verwendet.

Das Format von Here-Dokumenten ist:

      <<[-]word
              here-document
      delimiter

An Wort wird keine Parametererweiterung, Befehlsersetzung, arithmetische Erweiterung oder Pfadnamenerweiterung durchgeführt. Wenn Zeichen in Word in Anführungszeichen stehen, ist das Trennzeichen das Ergebnis der Entfernung von Anführungszeichen in Word, und die Zeilen im Hier-Dokument werden nicht erweitert. Wenn das Wort nicht in Anführungszeichen steht, werden alle Zeilen des Hier-Dokuments einer Parametererweiterung, Befehlsersetzung und arithmetischen Erweiterung unterzogen . Im letzteren Fall die Zeichenfolge \<newline> wird ignoriert und \ muss verwendet werden, um die Zeichen \ in Anführungszeichen zu setzen , $ , und ` .


Linux
  1. Wie verschiebt man 100 Dateien aus einem Ordner mit Tausenden?

  2. Wie kann ich eine Datei von Awk kategorisieren?

  3. Wie ändere ich einen Dateinamen, der Zeichen enthält?

  4. Wie benenne ich eine Datei unter Linux um?

  5. Wie funktioniert cat << EOF in Bash?

So erstellen Sie eine Tar-Gz-Datei

So entpacken (öffnen) Sie die Gz-Datei

So erstellen Sie eine Datei unter Linux mit dem Cat-Befehl

So verknüpfen Sie eine Datei unter Linux per Symlink

Wie Echo in Datei

So bearbeiten Sie HTML-Code in cPanel