Réponses:
echo "some data for the file" >> fileName
sudo sh -c 'echo "some data for the file" >> fileName'
#!/bin/sh
FILE="/path/to/file"
/bin/cat <<EOM >$FILE
text1
text2 # This comment will be inside of the file.
The keyword EOM can be any text, but it must start the line and be alone.
EOM # This will be also inside of the file, see the space in front of EOM.
EOM # No comments and spaces around here, or it will not work.
text4
EOM
Vous pouvez rediriger la sortie d'une commande vers un fichier:
$ cat file > copy_file
ou y ajouter
$ cat file >> copy_file
Si vous voulez écrire directement, la commande est echo 'text'
$ echo 'Hello World' > file
sudo sh -c 'cat file > /etc/init/gunicorn.conf'
(grâce au commentaire de lukaserat ci-dessus)
#!/bin/bash
cat > FILE.txt <<EOF
info code info
info code info
info code info
EOF
cat > FILE.txt
puis appuyez sur ctrl + D lorsque vous avez terminé .
Je sais que c'est une sacrée vieille question, mais comme l'OP concerne les scripts, et pour le fait que Google m'a amené ici, l'ouverture de descripteurs de fichiers pour la lecture et l'écriture en même temps doit également être mentionnée.
#!/bin/bash
# Open file descriptor (fd) 3 for read/write on a text file.
exec 3<> poem.txt
# Let's print some text to fd 3
echo "Roses are red" >&3
echo "Violets are blue" >&3
echo "Poems are cute" >&3
echo "And so are you" >&3
# Close fd 3
exec 3>&-
Ensuite, cat
le fichier sur le terminal
$ cat poem.txt
Roses are red
Violets are blue
Poems are cute
And so are you
Cet exemple entraîne l'ouverture du fichier poem.txt pour la lecture et l'écriture sur le descripteur de fichier 3. Il montre également que les boîtes * nix connaissent plus de fd que stdin, stdout et stderr (fd 0,1,2). Cela tient vraiment beaucoup. Habituellement, le nombre maximum de descripteurs de fichiers que le noyau peut allouer peut être trouvé dans /proc/sys/file-max
ou /proc/sys/fs/file-max
mais l'utilisation de tout fd supérieur à 9 est dangereuse car elle pourrait entrer en conflit avec les fd utilisés par le shell en interne. Alors ne vous embêtez pas et utilisez uniquement les 0-9 de fd. Si vous avez besoin de plus de 9 descripteurs de fichiers dans un script bash, vous devez quand même utiliser une langue différente :)
Quoi qu'il en soit, les fd peuvent être utilisés de nombreuses façons intéressantes.
J'aime cette réponse:
cat > FILE.txt <<EOF
info code info
...
EOF
mais suggérerais cat >> FILE.txt << EOF
si vous voulez simplement ajouter quelque chose à la fin du fichier sans effacer ce qui existe déjà
Comme ça:
cat >> FILE.txt <<EOF
info code info
...
EOF
Déplacer mon commentaire comme réponse, comme demandé par @lycono
Si vous devez le faire avec des privilèges root, procédez comme suit:
sudo sh -c 'echo "some data for the file" >> fileName'
echo "some data for the file" | sudo tee -a fileName >/dev/null
d'exécuter uniquement en tee
tant que root.
Pour les environnements où les documents ne sont pas disponibles ici ( Makefile
, Dockerfile
, etc.) , vous pouvez souvent utiliser printf
une solution raisonnablement lisible et efficace.
printf '%s\n' '#!/bin/sh' '# Second line' \
'# Third line' \
'# Conveniently mix single and double quotes, too' \
"# Generated $(date)" \
'# ^ the date command executes when the file is generated' \
'for file in *; do' \
' echo "Found $file"' \
'done' >outputfile
J'ai pensé qu'il y avait quelques réponses parfaitement fines, mais aucun résumé concis de toutes les possibilités; Donc:
Le principal principe derrière la plupart des réponses ici est la redirection . Deux sont des opérateurs de redirection importants pour l'écriture dans des fichiers:
echo 'text to completely overwrite contents of myfile' > myfile
echo 'text to add to end of myfile' >> myfile
D'autres ont mentionné, plutôt que d'une source d'entrée fixe comme echo 'text'
, vous pouvez également écrire de manière interactive dans des fichiers via un "document ici", qui sont également détaillés dans le lien vers le manuel bash ci-dessus. Ces réponses, par exemple
cat > FILE.txt <<EOF
ou cat >> FILE.txt <<EOF
utilisez les mêmes opérateurs de redirection, mais ajoutez une autre couche via "Here Documents". Dans la syntaxe ci-dessus, vous écrivez dans le FILE.txt via la sortie de cat
. L'écriture n'a lieu qu'après que l'entrée interactive a reçu une chaîne spécifique, dans ce cas 'EOF', mais cela peut être n'importe quelle chaîne, par exemple:
cat > FILE.txt <<'StopEverything'
ou cat >> FILE.txt <<'StopEverything'
fonctionnerait tout aussi bien. Ici, les documents recherchent également divers délimiteurs et autres caractères d'analyse intéressants, alors consultez les documents pour plus d'informations à ce sujet.
Un peu compliqué, et plus d'un exercice pour comprendre à la fois la redirection et la syntaxe Here Documents, mais vous pouvez combiner la syntaxe de style Here Document avec les opérateurs de redirection standard pour devenir une chaîne Here:
Redirection de la sortie de l'entrée catcat > myfile <<<'text to completely overwrite contents of myfile'
cat >> myfile <<<'text to completely overwrite contents of myfile'
Peut également utiliser ici le document et vi, le script ci-dessous génère un FILE.txt avec 3 lignes et interpolation variable
VAR=Test
vi FILE.txt <<EOFXX
i
#This is my var in text file
var = $VAR
#Thats end of text file
^[
ZZ
EOFXX
Le fichier aura alors 3 lignes comme ci-dessous. "i" consiste à démarrer le mode d'insertion vi et de même à fermer le fichier avec Esc et ZZ.
#This is my var in text file
var = Test
#Thats end of text file