J'ai un script bash qui a beaucoup d' echo
instructions et j'ai également un alias echo
à la echo -e
fois dans .bash_profile
et .bashrc
, afin que les nouvelles lignes soient imprimées correctement pour une instruction comme echo 'Hello\nWorld'
la sortie devrait être
Hello
World
mais la sortie que je reçois est
Hello\nWorld
J'ai même essayé d'utiliser shopt -s expand_aliases
dans le script, ça n'aide pas
J'exécute mon script en tant que bash /scripts/scriptnm.sh
; si je l'exécute car . /scripts/scriptnm.sh
j'obtiens la sortie souhaitée ...
echo
comme vous voulez est une mauvaise pratique àRéponses:
L'histoire mixte de
echo
signifie que son fonctionnement par défaut varie d'un shell à l'autre. POSIX spécifie que le résultat deecho
est «défini par l'implémentation» si le premier argument est-n
ou si n'importe quel argument contient une barre oblique inverse.Il est plus fiable à utiliser
printf
(soit comme une commande intégrée soit comme une commande externe) où le comportement est mieux défini: la barre oblique inversée de style C et les spécificateurs de format sont pris en charge dans la chaîne de format (le premier argument).Vous pouvez contrôler l'expansion des séquences d'échappement backslash de bash est
echo
commande intégrée avec l'xpg_echo
option shell.Placez-le en haut de n'importe quel script bash pour
echo
développer automatiquement les échappements de barre oblique inverse sans avoir à ajouter-e
à chaque commande echo.la source
Lorsque vous utilisez
bash myfile.sh
, Bash est exécuté en mode "batch", sur un processus distinct , et ne lit pas son profil ou son fichier rc.Lorsque vous utilisez
. myfile.sh
, le fichier provient du processus shell actuel (comme si son contenu avait été tapé par vous), il voit donc vos alias actuellement définis.En général, c'est une très mauvaise idée d'écrire des scripts qui dépendent d'une configuration particulière du shell, en particulier des alias, sauf si vous les définissez dans le script lui-même. ( Ne comptez jamais sur l'utilisateur
.bashrc
, même s'il est le vôtre.)la source
La pratique recommandée consiste à utiliser
printf
pour tous les nouveaux scripts.la source
Cela fonctionne bien dans le terminal
enregistrer dans un fichier et le rendre utilisable (chmod + x)
exécuter en tant que ./votre_fichier
la source