Écrire quelques lignes dans un fichier avec un script bash
Comment puis-je écrire quelques lignes d'un fichier dans un script bash?
Je veux écrire ce qui suit dans un fichier ~/.inputrc
"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char
Actuellement j'ai ce travail, mais un peu laid méthode, et je suis sûr qu'il doit y avoir une meilleure façon.
#!/bin/sh
echo \"\\e[A\": history-search-backward > ~/.inputrc
echo \"\\e[B\": history-search-forward >> ~/.inputrc
echo \"\\e[C\": forward-char >> ~/.inputrc
echo \"\\e[D\": backward-char >> ~/.inputrc
Il y a toujours des dizaines de façons différentes de faire des choses comme cela, mais ce que vous avez ici semble comme la plus simple, sans doute la meilleure façon de le faire.
OriginalL'auteur wim | 2011-10-19
Vous devez vous connecter pour publier un commentaire.
Légèrement méthode la plus simple serait:
Je suis curieux de savoir pourquoi vous avez besoin de faire cela. Si vous voulez configurer un fichier avec certains de texte spécifique, vous devriez peut-être créer le squelette de fichier, et la déverser dans
/etc/skel
. Ensuite, vous pouvezcp /etc/skel/.inputrc ~/.inputrc
dans votre script.C'est un ici doc. Il vous permet d'envoyer du texte arbitraire le stdin d'une commande, dans ce cas, le chat, et il est être traitées. Le
EOF
est utilisé pour indiquer le moment où le texte est complet. Sinon, c'est juste un chat qui commande l'écriture d'un fichier.OriginalL'auteur Spencer Rathbun
Utiliser un ici le document:
Cela vous permet de mettre les données en ligne dans votre script shell. La chaîne
EOF
peut être ce que vous voulez, il suffit donc de choisir n'importe quelle chaîne de caractères qui n'apparaissent pas dans votre entrée sur une seule ligne par lui-même.OriginalL'auteur Adam Rosenfield
À l'aide de la
echo
de commande pour d'autres choses que de simples chaînes de caractères peuvent être complexes et non portable. Il y a la version GNU deecho
(partie de coreutils), de la version BSD que vous le trouverez probablement sur MacOS, et la plupart des shells ontecho
comme une commande intégrée. Toutes ces différentes versions ont subtilement différentes façons de gérer les options de ligne de commande options (-n
pour inhiber le suiveur de ligne,-c
/-C
d'activer ou de désactiver des antislashes) et s'échappe (\e
pourrait ou ne pourrait pas être un encodage pour le caractère d'échappement).printf
à la rescousse.printf
est probablement disponibles en tant que/usr/bin/printf
et/ou/bin/printf
, et c'est aussi un haut-dans certains shells (bash et zsh de toute façon), mais son comportement est beaucoup plus cohérent.Voici la GNU coretuils printf documentation.
Pour votre exemple, vous pourriez écrire:
OriginalL'auteur Keith Thompson
C'est assez bien.
Voici une façon de réduire la redondance:
$TEXT
; justeecho "[multiple lines]" > ~/.inputrc
.Et votre version ne fonctionne pas sans les guillemets doubles autour de
$TEXT
(j'ai ajouté). Veuillez tester le code avant de le poster, ou de mentionner qu'il est non testé.OriginalL'auteur mmrtnt