J'ai googlé cette question en vain. J'automatise un processus de construction ici au travail, et tout ce que j'essaie de faire est d'obtenir des numéros de version et une petite description de la construction qui peut être multiligne. Le système sur lequel il fonctionne est OSX 10.6.8.
J'ai tout vu, de l'utilisation de CAT au traitement de chaque ligne si nécessaire. Je n'arrive pas à comprendre ce que je dois utiliser et pourquoi.
Tentatives
read -d '' versionNotes
Résultats en entrée brouillée si l'utilisateur doit utiliser la touche de retour arrière. Il n'y a pas non plus de bon moyen de terminer l'entrée car ^ D ne se termine pas et ^ C quitte simplement le processus.
read -d 'END' versionNotes
Fonctionne ... mais brouille toujours l'entrée si la touche de retour arrière est nécessaire.
while read versionNotes
do
echo " $versionNotes" >> "source/application.yml"
done
Ne termine pas correctement l'entrée (car je suis trop tard pour rechercher une correspondance avec une chaîne vide).
Réponses:
man bash
mentionne «…… »
et je suis d'accord que cela mérite d'être mentionné -
echo "$myVar"
aurait affiché l'entrée telle qu'elle a été donnée.la source
man stty
, découvrez comment obtenir les paramètres actuelsEssaye ça:
Sans saut de ligne:
Avec des sauts de ligne:
la source
-d ''
c'est exactement ce dont j'avais besoin. MerciReportez-vous à l'excellent Bash Guide pour tous vos besoins de script bash.
En particulier, la FAQ Bash contient ceci au numéro 1:
Comment lire un fichier (flux de données, variable) ligne par ligne (et / ou champ par champ)?
la source
read -r
, mais comment puis-je le faire à partir de STDIN? J'ai essayé d'utiliserread -r
dès le début.J'ai résolu ce problème en traitant chaque ligne jusqu'à ce que je trouve une ligne vierge. Cela fonctionne assez bien pour ma situation. Mais si quelqu'un veut ajouter une meilleure solution, n'hésitez pas à le faire.
la source
read -r
plutôt.Vous pouvez démarrer un éditeur comme vim, pico ...
la source
Quelques corrections:
-e
lecture (vous avez donc l'historique de bash et toutes les fonctionnalités d'édition)-d
ne prend qu'un seul caractère. Par exemple de 'END' prend 'E' et chaque fois que l'utilisateur écrit un 'E' la lecture s'arrête (je suppose que ce n'est pas ce que vous voulez ...)Il existe plusieurs possibilités pour ce faire. Je choisirais de lire ligne par ligne et m'arrêterais lorsqu'une ligne vide est trouvée (bien que vous puissiez définir n'importe quel mot d'arrêt):
la source
Vous disposez de plusieurs méthodes.
L'une des méthodes les plus simples est:
Par exemple:
la source
ls
!Nous utilisons une construction utilisant xargs et ctrl-d pour la rupture. Je ne suis pas parfaitement satisfait de cela, mais cela fait certainement le travail de prendre les entrées utilisateur multi-lignes et de les bourrer dans une variable (formatage intact). (Les première et troisième affectations ajoutent des guillemets autour du contenu de l'entrée xargs.)
Nous utilisons reminderBody comme objet d'un e-mail envoyé par mail (via bash).
la source
Voir: http://tldp.org/LDP/abs/html/internal.html#READR
Utilisez
read
et notez que si vous terminez une ligne,\
la nouvelle ligne est ignorée. Vous pourriez donc faire:la source