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

Shell - Variableninhalte in eine Datei schreiben

Keine der obigen Antworten funktioniert, wenn Ihre Variable:

  • beginnt mit -e
  • beginnt mit -n
  • beginnt mit -E
  • enthält einen \ gefolgt von einem n
  • darf kein zusätzlicher Zeilenumbruch angehängt werden

und daher kann man sich nicht auf sie für willkürliche Zeichenfolgeninhalte verlassen.

In Bash können Sie "here strings" verwenden als:

cat <<< "$var" > "$destdir"

Wie im Kommentar von Ash unten angemerkt, @Trebawas Antwort (formuliert im selben Raum wie meine!) mit printf ist ein besserer Ansatz als cat .


All dies funktioniert, muss aber auch ein Problem umgehen (Escapes und Sonderzeichen), das gar nicht erst auftreten muss:Sonderzeichen, wenn die Variable von der Shell erweitert wird. Tun Sie das (Variablenerweiterung) erst gar nicht. Verwenden Sie die Variable direkt, ohne Erweiterung.

Wenn Ihre Variable ein Geheimnis enthält und Sie dieses Geheimnis in eine Datei kopieren möchten, möchten Sie möglicherweise keine Erweiterung in der Befehlszeile haben, da die Ablaufverfolgung/das Befehlsecho der Shell-Befehle das Geheimnis preisgeben könnte. Also alle Antworten, die $var verwenden in der Befehlszeile kann ein potenzielles Sicherheitsrisiko darstellen, da der Variableninhalt der Verfolgung und Protokollierung der Shell ausgesetzt wird.

Verwenden Sie für bereits exportierte Variablen Folgendes:

printenv var >file

Das bedeutet im Falle der OP-Frage:

printenv var >"$destfile"

Hinweis:Bei Variablennamen muss zwischen Groß- und Kleinschreibung unterschieden werden.

Warnung:Es ist keine gute Idee, eine Variable zu exportieren, nur um sie mit printenv zu drucken. Wenn Sie eine nicht exportierte Skriptvariable haben, die ein Geheimnis enthält, wird sie durch das Exportieren für alle zukünftigen untergeordneten Prozesse verfügbar gemacht (es sei denn, sie wird nicht exportiert, z. B. mit export -n ).


Verwenden Sie die echo Befehl:

var="text to append";
destdir=/some/directory/path/filename

if [ -f "$destdir" ]
then 
    echo "$var" > "$destdir"
fi

Die if testet das $destdir repräsentiert eine Datei.

Die > fügt den Text nach dem Abschneiden der Datei an. Wenn Sie nur den Text in $var anhängen möchten zum vorhandenen Inhalt der Datei hinzufügen, dann verwenden Sie >> stattdessen:

echo "$var" >> "$destdir"

Die cp Der Befehl wird zum Kopieren von Dateien (in Dateien) verwendet, nicht zum Schreiben von Text in eine Datei.


echo hat das Problem, dass wenn var enthält so etwas wie -e , wird es als Flag interpretiert. Eine weitere Option ist printf , aber printf "$var" > "$destdir" erweitert alle maskierten Zeichen in der Variablen, wenn also die Variable Backslashes enthält, stimmt der Dateiinhalt nicht überein. Da jedoch printf nur umgekehrte Schrägstriche als Escapezeichen im Formatstring interpretiert, können Sie den %s verwenden Formatbezeichner, um den genauen Variableninhalt in der Zieldatei zu speichern:

printf "%s" "$var" > "$destdir"


Linux
  1. Ausgabe des Befehls in Shell-Variable speichern?

  2. In .txt-Datei schreiben?

  3. Ändern des Inhalts einer Datei durch Shell-Skript

  4. Kann eine .sh-Datei Malware sein?

  5. Den Inhalt einer Variablen wortweise umkehren

Bash:In Datei schreiben

Exportbefehl in Linux erklärt

Was ist Subshell in Linux?

Kopieren und überschreiben Sie eine Datei im Shell-Skript

Was ist eine .sh-Datei?

Suchen von Inhalten einer Datei in einer anderen Datei