У меня есть Баш скрипт , который имеет множество echo
заявлений , а также я псевдоним , echo
чтобы echo -e
как в .bash_profile
и .bashrc
, таким образом , что новые линии печатаются правильно для заявления , как echo 'Hello\nWorld'
результат должен быть
Hello
World
но вывод я получаю
Hello\nWorld
Я даже пытался использовать shopt -s expand_aliases
в сценарии, это не помогает
Я запускаю свой скрипт как bash /scripts/scriptnm.sh
; если я запускаю его, когда . /scripts/scriptnm.sh
получаю желаемый результат ...
echo
как хочешь это плохая практика ИМХООтветы:
Смешанная история
echo
означает, что его работа по умолчанию варьируется от оболочки к оболочке. POSIX указывает, что результатecho
«определяется реализацией», если первый аргумент равен-n
или любой аргумент содержит обратную косую черту.Более надежно использовать
printf
(в качестве встроенной команды или внешней команды), где поведение более четко определено: обратная косая черта в стиле C и спецификаторы формата поддерживаются в строке формата (первый аргумент).Вы можете контролировать расширение обратной косой черты управляющих последовательностей из баш «ы
echo
встроенной команды сxpg_echo
опцией оболочки.Установите его в верхней части любого скрипта bash, чтобы
echo
автоматически расширять экранирование обратной косой черты без необходимости добавления-e
к каждой команде echo.источник
При использовании
bash myfile.sh
Bash запускается в «пакетном» режиме в отдельном процессе и не читает свой профиль или файл rcfile.Когда вы используете
. myfile.sh
файл, он получен текущим процессом оболочки (как если бы его содержимое было набрано вами), поэтому он видит ваши псевдонимы, определенные в данный момент.В целом, это очень плохая идея - писать сценарии, которые зависят от конкретной конфигурации оболочки, особенно от псевдонимов, если вы не определите их в самом сценарии . ( Никогда не полагайтесь на пользователя
.bashrc
, даже если он ваш.)источник
Рекомендуемая практика - использовать
printf
для всех новых скриптов.источник
Это отлично работает в терминале
сохранить в файл и сделать его исполняемым (chmod + x)
запустить как ./your_file
источник