Je voudrais créer un fichier en utilisant la commande echo et l'opérateur de redirection, le fichier doit être composé de quelques lignes.
J'ai essayé d'inclure une nouvelle ligne par "\ n" dans la chaîne:
echo "first line\nsecond line\nthirdline\n" > foo
mais de cette façon, aucun fichier avec trois lignes n'est créé, mais un fichier avec une seule ligne et le contenu textuel de la chaîne.
Comment puis-je créer en utilisant uniquement cette commande un fichier avec plusieurs lignes?
shell
command-line
echo
newlines
Abdul Al Hazred
la source
la source
Réponses:
Vous avez demandé d'utiliser une syntaxe avec la
echo
commande:(Mais considérez également l'autre réponse que vous avez obtenue.)
La
$'...'
construction développe les séquences d'échappement ANSI intégrées.la source
Ce que fait l'écho avec les échappements de caractères est défini par l'implémentation. Dans de nombreuses implémentations d'écho (y compris les plus modernes), la chaîne passée n'est pas du tout examinée pour les échappements par défaut.
Avec l'écho fourni par GNU bash (en tant que intégré), et certaines autres variantes d'écho, vous pouvez faire quelque chose comme ceci:
Cependant, cela ressemble vraiment à ce que vous voulez
printf
, ce qui est plus lisible à mes yeux et plus portable aussi (il a cette fonctionnalité définie par POSIX):Vous pouvez également envisager d'utiliser un document ici :
la source
echo -en 'text..'
, alors que la réponse acceptée ne reconnaissait pas mon caractère de nouvelle ligne (\n
), c'est leecho -en
cas.)Voici quelques autres façons de créer un fichier multiligne à l'aide de la
echo
commande:où les deuxième et troisième commandes utilisent l'
>>
opérateur de redirection, ce qui entraîne l'ajout (ajout) de la sortie de la commande au fichier (qui devrait déjà exister, à ce stade).Ou
où les parenthèses regroupent les
echo
commandes en un sous-processus, qui ressemble et agit comme n'importe quel programme unique qui produit plusieurs lignes (commels
, par exemple).Une subtile variation de ce qui précède est
Ceci est légèrement plus efficace que la deuxième réponse dans la mesure où il ne crée pas de sous-processus. Cependant, la syntaxe est légèrement plus délicate: notez que vous devez avoir un espace après le
{
et un point-virgule avant le}
.Voir Quels sont les opérateurs de contrôle et de redirection du shell? pour plus d'informations.
la source
Pour donner encore une autre option, vous pouvez simplement frapper Enter (c'est-à-dire, une nouvelle ligne littérale):
Notez que vous ne tapez pas le
>
au début de la deuxième ligne. C'est l'invite du shell secondaire$PS2
, que le shell imprime lorsque vous tapez une commande incomplète (par exemple, dans ce cas, une commande avec un caractère de guillemet sans correspondance).la source
POSIX 7 dit que vous ne pouvez pas
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html
-e
n'est pas défini et les barres obliques inverses sont définies par l'implémentation:sauf si vous disposez d'une extension XSI en option.
Utilisez donc à la
printf
place:la notation du format de fichier :
Gardez également à l'esprit que Ubuntu 15.10 et la plupart des distributions implémentent les
echo
deux comme:help echo
which echo
ce qui peut entraîner une certaine confusion.
la source
echo
intégrée dans chaque shell disponible sur le système. Sur Ubuntu / bin / sh est généralement dash, bash vient également par défaut. zsh, rc, mksh, yash, csh, tcsh, ksh93 ... auront tous leur propre écho avec un comportement différent. Notez quewhich echo
cela ne vous donnera pas le chemin de l'écho du système dans tous les shells.which
était à l'origine (dans les années 80) un script csh pour les utilisateurs csh uniquement (chargé les alias à partir de ~ / .cshrc) et est toujours sur certains systèmes.which
est un intégré dans zsh et tcsh.