Crea, scrivi e salva file da uno script Shell


10

Non voglio scrivere il file manualmente, quindi ho creato uno script di shell. C'è un modo per scrivere e salvare il file automaticamente senza che l'utente prema i tasti?

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

^ Questo sarà all'interno di un file * .sh

O c'è un altro modo per creare un semplice file di testo in uno script?


1
Ho il sospetto che tu stia facendo la domanda sbagliata qui. Esistono modi molto più semplici per scrivere su un file in modo programmatico rispetto al tentativo di controllare un editor come nano. Dicci invece cosa vuoi fare con il file.
Warren Hill,

Voglio solo crearlo e scrivere un sacco di righe.
Zarkopafilis,

Stai chiedendo una soluzione come Autoit per Windows in grado di automatizzare i programmi GUI tra le altre cose o come poter scrivere un testo da uno script di shell, ad esempio $echo "Some text" > afile.txt?
Stef K,

@Zarkopafilis - Ho modificato la tua domanda per chiarire cosa intendi. Se ti ho frainteso, puoi sempre ripristinarlo. Ho anche pubblicato una risposta per te.
Warren Hill,

Risposte:


14

Per sequenze di comandi più complesse, è consigliabile utilizzare il catcomando con un documento qui . Il formato di base è

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

Esistono due comportamenti leggermente diversi a seconda che l'etichetta END_TEXT sia quotata o non quotata:

  1. etichetta non quotata : i contenuti vengono scritti dopo le consuete espansioni della shell

  2. etichetta quotata : i contenuti di questo documento sono trattati alla lettera, senza le solite espansioni della shell

Ad esempio, considera il seguente script

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

I risultati sono

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

e

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

Se stai emettendo comandi shell dal tuo script, probabilmente vuoi il modulo citato.


Amico, per quanto tempo ho cercato questa ^^ una domanda: funziona solo nello script o è possibile usarlo anche direttamente nella shell?
derHugo,

@derHugo puoi usarlo direttamente nella shell - in tal caso, sarebbe più normale omettere END_TEXTe semplicemente usare CTRL-Dper segnalare la fine dell'input. Vedi ad esempio Come segnalare la fine dell'ingresso stdin
steeldriver

7

Non è necessario scherzare con un editor per farlo.

Puoi aggiungere qualcosa a un file con un semplice comando echo. Per esempio

echo "Hello World" >> txt

Aggiungerà "Hello world" al file txt. se il file non esiste verrà creato.

O se il file potrebbe già esistere e si desidera sovrascriverlo

echo "Hello World" > txt

Per la prima riga: e

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

Per le righe successive.

Nella migliore delle ipotesi, lo .shscript potrebbe contenere solo una serie di comandi echo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.