2017-02-07 7 views
0

je courais les commandes suivantes sur FreeBSD:l'aide d'une commande en écho donne un résultat différent

$ cat filename | tr '\t' '\n' 
#Output 
DOCS  : ON 

NLS  : ON 

RCSI  : ON 

$ echo `cat filename | tr '\t' '\n'` 
#Output 
DOCS  : ON NLS  : ON RCSI  : ON 

Pourquoi écho ne diffusons pas d'identique à la sortie de commande réelle? Quelque chose ne va pas avec la syntaxe en écho?

+0

Si vous utilisez 'csh', s'il vous plaît que cela soit très clair dans votre question et ajoutez l'étiquette correspondante. – mklement0

Répondre

0
echo "`cat filename | tr '\t' '\n'`" 
+1

Ne fonctionne pas sur FreeBSD. Résultat identique, affiché sur une ligne. – user6360694

1

Pour le shell csh, shell par défaut sur freebsd:

De @ Mateusz-Piotrowski et @ ismael-Luceno réponse: Vous ne pouvez pas, vous besoin d'une autre coquille. Changer globaly avec:

chsh -s /usr/local/bin/bash 

ou tout simplement ajouter en haut de votre script:

#!/usr/local/bin/bash 

Pour le shell non par défaut sur freebsd:

Vous avez besoin d'ajouter des guillemets sur votre sous -commande:

echo "`cat filename | tr '\t' '\n'`" 

I Parce que bash remplacera \ n par de l'espace lors du passage d'arguments à des commandes sans guillemets

+0

Un message d'erreur de nom de variable non valide est affiché sur FreeBSD. – user6360694

+0

Qu'est-ce que shell utilisez-vous?, echo $ SHELL – izissise

+0

echo $ SHELL me donne/bin/csh – user6360694

1

Contrairement à sh/ksh, le shell C convertit toujours les nouvelles lignes, soit vous évitez d'utiliser une extension de commande, soit vous contournez le problème avec du code d'échappement + substitution du côté csh.

0

Il semble que la meilleure façon de le résoudre est de changer votre shell en /bin/sh qui devrait vous convenir si vous êtes familier avec Bash.

Pour changer votre course shell:

chsh -s /usr/local/bin/bash 

Sinon, vous pouvez simplement taper sh dans votre terminal et profiter de votre session interactive dans /bin/sh.

Si vous voulez vraiment utiliser Bash mais est ici un fil qui pourrait être utile: How to Install bash on FreeBSD

Comme une note de côté: il est recommandé de ne pas changer de façon permanente la coquille de racine dans FreeBSD.

0

Vous devez utiliser

foreach line (`cat a | tr '\t' '\n'`") 
    echo $line 
end