Créer, écrire et enregistrer un fichier à partir d'un script Shell

10

Je ne veux pas écrire le fichier manuellement, j'ai donc fait un shell-script. Existe-t-il un moyen d'écrire et d'enregistrer le fichier automatiquement sans obliger l'utilisateur à appuyer sur les touches?

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

^ Ce sera dans un fichier * .sh

Ou existe-t-il une autre façon de créer un simple fichier texte dans un script?

Zarkopafilis
la source
1
Je suppose que vous posez la mauvaise question ici. Il existe des moyens beaucoup plus simples d'écrire dans un fichier de manière programmatique que d'essayer de contrôler un éditeur tel que nano. Dites-nous plutôt ce que vous voulez faire avec le fichier.
Warren Hill
Je veux juste le créer et écrire un tas de lignes.
Zarkopafilis
Demandez -vous une solution quelque chose comme Autoit pour Windows qui peut automatiser des programmes GUI entre autres ou comment être en mesure d'écrire du texte à partir d'un script shell par exemple $echo "Some text" > afile.txt?
Stef K
@Zarkopafilis - J'ai modifié votre question pour clarifier ce que vous voulez dire. Si je vous ai mal compris, vous pouvez toujours revenir en arrière. J'ai également posté une réponse pour vous.
Warren Hill

Réponses:

14

Pour des séquences de commandes plus complexes, vous devriez envisager d'utiliser la catcommande avec un document ici . Le format de base est

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

Il existe deux comportements subtilement différents selon que le libellé END_TEXT est cité ou non:

  1. étiquette sans guillemets : le contenu est écrit après les expansions habituelles du shell

  2. étiquette entre guillemets : le contenu du document ici est traité littéralement, sans les extensions de shell habituelles

Par exemple, considérez le script suivant

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

Les résultats sont

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

et

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

Si vous générez des commandes shell à partir de votre script, vous souhaiterez probablement le formulaire cité.

tournevis
la source
Man combien de temps j'ai cherché cette ^^ une question: est-ce que cela fonctionne uniquement en script ou est-il possible de l'utiliser aussi directement dans le shell?
derHugo
@derHugo vous pouvez l'utiliser directement dans le shell - dans ce cas, il serait plus habituel d'omettre le END_TEXTet d'utiliser simplement CTRL-Dpour signaler la fin de l'entrée. Voir par exemple Comment signaler la fin de l'entrée stdin
steeldriver
7

Il n'est pas nécessaire de jouer avec un éditeur pour ce faire.

Vous pouvez ajouter quelque chose à un fichier avec une simple commande d'écho. Par exemple

echo "Hello World" >> txt

Ajoutera "Hello world" au fichier txt. si le fichier n'existe pas, il sera créé.

Ou si le fichier existe déjà et que vous souhaitez l'écraser

echo "Hello World" > txt

Pour la première ligne: et

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

Pour les lignes suivantes.

Au plus simple, le .shscript pourrait simplement contenir un ensemble de commandes d'écho.

Warren Hill
la source