Erstellen, Schreiben und Speichern von Dateien aus einem Shell-Skript

10

Ich möchte die Datei nicht manuell schreiben, deshalb habe ich ein Shell-Skript erstellt. Gibt es eine Möglichkeit, die Datei automatisch zu schreiben und zu speichern, ohne dass der Benutzer die Tasten drücken muss?

sudo nano blah
#write stuff to file
#save file
#continue

^ Dies befindet sich in einer * .sh-Datei

Oder gibt es eine andere Möglichkeit, eine einfache Textdatei in einem Skript zu erstellen?

Zarkopafilis
quelle
1
Ich vermute, Sie stellen hier die falsche Frage. Es gibt viel einfachere Möglichkeiten, programmgesteuert in eine Datei zu schreiben, als zu versuchen, einen Editor wie Nano zu steuern. Sagen Sie uns stattdessen, was Sie mit der Datei tun möchten.
Warren Hill
Ich möchte es nur erstellen und ein paar Zeilen schreiben.
Zarkopafilis
Fragen Sie nach einer Lösung wie Autoit für Windows, mit der Sie unter anderem GUI-Programme automatisieren können, oder wie Sie beispielsweise Text aus einem Shell-Skript schreiben können $echo "Some text" > afile.txt?
Stef K
@Zarkopafilis - Ich habe Ihre Frage bearbeitet, um klarer zu machen, was Sie meinen. Wenn ich Sie missverstanden habe, können Sie es jederzeit zurücksetzen. Ich habe auch eine Antwort für Sie gepostet.
Warren Hill

Antworten:

14

Bei komplexeren catBefehlssequenzen sollten Sie den Befehl mit einem Dokument hier verwenden . Das Grundformat ist

command > file << END_TEXT
some text here
more text here
END_TEXT

Es gibt zwei subtil unterschiedliche Verhaltensweisen, je nachdem, ob das END_TEXT-Label in Anführungszeichen oder nicht in Anführungszeichen gesetzt ist:

  1. nicht zitiertes Label : Der Inhalt wird nach den üblichen Shell-Erweiterungen geschrieben

  2. Zitiertes Etikett : Der Inhalt des hier gezeigten Dokuments wird ohne die üblichen Shell-Erweiterungen wörtlich behandelt

Betrachten Sie beispielsweise das folgende Skript

#!/bin/bash

var1="VALUE 1"
var2="VALUE 2"

cat > file1 << EOF1
do some commands on "$var1" 
and/or "$var2"
EOF1

cat > file2 << "EOF2"
do some commands on "$var1" 
and/or "$var2"
EOF2

Die Ergebnisse sind

$ cat file1
do some commands on "VALUE 1" 
and/or "VALUE 2"

und

$ cat file2
do some commands on "$var1" 
and/or "$var2"

Wenn Sie Shell-Befehle aus Ihrem Skript ausgeben, möchten Sie wahrscheinlich das zitierte Formular.

Steeldriver
quelle
Mann, wie lange habe ich nach dieser ^^ eine Frage gesucht: Funktioniert das nur im Skript oder ist es möglich, es auch direkt in der Shell zu verwenden?
derHugo
@derHugo können Sie es direkt in der Shell verwenden - in diesem Fall wäre es üblicher, das wegzulassen END_TEXTund einfach zu verwenden CTRL-D, um das Ende der Eingabe zu signalisieren. Siehe zum Beispiel, wie man das Ende der stdin-Eingabe
signalisiert
7

Sie müssen sich nicht mit einem Editor herumschlagen, um dies zu tun.

Sie können mit einem einfachen Echo-Befehl etwas an eine Datei anhängen. Zum Beispiel

echo "Hello World" >> txt

Hängt "Hallo Welt" an die Datei an txt. Wenn die Datei nicht vorhanden ist, wird sie erstellt.

Oder wenn die Datei bereits vorhanden ist und Sie sie überschreiben möchten

echo "Hello World" > txt

Für die erste Zeile: und

echo "I'm feeling good" >> txt
echo "how are you" >> txt 

Für nachfolgende Zeilen.

Im einfachsten Fall kann das .shSkript nur eine Reihe von Echo-Befehlen enthalten.

Warren Hill
quelle