2017-02-07 25 views
0

Я бегу следующим команд на FreeBSD:Использования команды в эхе дает другой результат

$ 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 

Почему эхо не отображается так же, как фактический вывод команды? Что-то не так с синтаксисом в эхо?

+0

Если вы используете 'csh', пожалуйста, убедитесь, что очень ясно, в вашем вопросе и добавить соответствующий тег. – mklement0

ответ

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

Не работает над FreeBSD. Результат такой же, отображается в одной строке. – user6360694

1

Для CSH оболочки, оболочек по умолчанию на FreeBSD:

С @ Mateusz-Пиотровского и @ Исмаэль-luceno ответа: Вы не можете, вам нужна другая оболочка. Изменение globaly с:

chsh -s /usr/local/bin/bash 

или просто добавить в верхней части вашего скрипта:

#!/usr/local/bin/bash 

Для отсутствия оболочки по умолчанию на FreeBSD:

Вы должны добавить кавычки на вашем суб -команда:

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

I t состоит в том, что bash заменит \ n пробелом при передаче аргументов командам, когда он не указан

+0

Сообщение об ошибке с недопустимым именем переменной отображается во FreeBSD. – user6360694

+0

Что оболочки вы используете?, эхо $ SHELL – izissise

+0

эхо $ SHELL дает мне/бен/CSH – user6360694

1

В отличие от sh/ksh, оболочка C всегда будет преобразовывать новые строки, вы либо не используете расширение команды, либо работаете с проблемой некоторый escape код + замена на стороне csh.

0

Похоже, что самый простой способ решить эту проблему - заменить вашу оболочку на /bin/sh, которая вам подойдет, если вы знакомы с Bash.

Для того, чтобы изменить оболочку запустить:

chsh -s /usr/local/bin/bash 

В качестве альтернативы вы можете просто ввести sh в свой терминал и наслаждаться интерактивной сессии в /bin/sh.

Если вы действительно хотите использовать Bash однако вот нить, которая может быть полезной: How to Install bash on FreeBSD

В качестве примечания: не рекомендуется постоянно менять оболочку суперпользователя в FreeBSD.

0

Вы должны использовать

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

 Смежные вопросы

  • Нет связанных вопросов^_^