Utwórz, zapisz i zapisz plik ze skryptu powłoki

10

Nie chcę pisać pliku ręcznie, więc stworzyłem skrypt powłoki. Czy istnieje sposób automatycznego zapisu i zapisania pliku bez konieczności naciskania klawiszy przez użytkownika?

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

^ To będzie w pliku * .sh

Czy istnieje inny sposób na utworzenie prostego pliku tekstowego w skrypcie?

Zarkopafilis
źródło
1
Podejrzewam, że zadajesz tutaj niewłaściwe pytanie. Istnieją znacznie prostsze sposoby zapisywania do pliku w sposób programowy niż próba kontrolowania edytora, takiego jak nano. Powiedz nam, co chcesz zrobić z plikiem.
Warren Hill,
Chcę go tylko utworzyć i napisać kilka wierszy.
Zarkopafilis
Czy szukasz rozwiązania w rodzaju Autoit dla Windows, które może zautomatyzować między innymi programy GUI lub jak na przykład pisać tekst ze skryptu powłoki $echo "Some text" > afile.txt?
Stef K
@Zarkopafilis - Zredagowałem twoje pytanie, aby wyjaśnić, co masz na myśli. Jeśli źle zrozumiałem, zawsze możesz to cofnąć. Odpowiedziałem również dla ciebie.
Warren Hill,

Odpowiedzi:

14

W przypadku bardziej złożonych sekwencji poleceń należy rozważyć użycie catpolecenia z niniejszym dokumentem . Podstawowy format to

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

Istnieją dwa subtelnie różne zachowania w zależności od tego, czy etykieta END_TEXT jest cytowana czy nie:

  1. niecytowana etykieta : zawartość jest zapisywana po zwykłych rozszerzeniach powłoki

  2. cytowana etykieta : zawartość tego dokumentu jest traktowana dosłownie, bez zwykłych rozszerzeń powłoki

Rozważmy na przykład następujący skrypt

#!/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

Wyniki są

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

i

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

Jeśli wypisujesz polecenia powłoki ze skryptu, prawdopodobnie potrzebujesz cytowanego formularza.

steeldriver
źródło
Człowieku, jak długo szukałem tego ^^ jednego pytania: czy to działa tylko w skrypcie, czy też można go używać bezpośrednio w powłoce?
derHugo,
@derHugo możesz użyć go bezpośrednio w powłoce - w takim przypadku częściej byłoby pominąć END_TEXTi po prostu użyć CTRL-Ddo sygnalizowania końca wejścia. Zobacz na przykład Jak zasygnalizować koniec wejścia standardowego
steeldriver,
7

Aby to zrobić, nie trzeba się martwić edytorem.

Możesz dołączyć coś do pliku za pomocą prostego polecenia echa. Na przykład

echo "Hello World" >> txt

Do pliku doda „Hello world” txt. jeśli plik nie istnieje, zostanie utworzony.

Lub jeśli plik może już istnieć i chcesz go zastąpić

echo "Hello World" > txt

W pierwszym wierszu: i

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

Dla kolejnych linii.

W najprostszym przypadku .shskrypt może po prostu zawierać zestaw poleceń echa.

Warren Hill
źródło