echo -e работает в терминале, но не в скрипте bash
9929 просмотра
2 ответа
Я разработал и поддерживаю рубиновый гем под названием Githug и пытаюсь написать для него автоматический тестовый скрипт. Githug в основном манипулирует каталогом, чтобы поместить его в различные состояния рабочего репозитория git, и вы можете выполнять команды git, чтобы «решить» уровень.
Один из уровней запрашивает у вас информацию о git config, и я делаю следующее:
#! /bin/sh
# ...snip
#level 4
FULL_NAME=$(git config --get user.name)
EMAIL=$(git config --get user.email)
echo -e "$FULL_NAME\n$EMAIL" | githug
Когда я выполняю из bash-скрипта, он (echo -e) не работает. Но это происходит, когда я запускаю его из терминала.
FULL_NAME=$(git config --get user.name)
EMAIL=$(git config --get user.email)
echo -e "$FULL_NAME\n$EMAIL" | githug
********************************************************************************
* Githug *
********************************************************************************
What is your name? What is your email?
Congratulations, you have solved the level
Почему это не работает из скрипта bash?
Благодарю.
Автор: Gazler Источник Размещён: 12.11.2019 09:16Ответы (2)
14 плюса
Неправильный Шебанг:
#! /bin/sh
Когда это будет скрипт bash, используйте
#! /bin/bash
Bash имеет встроенное эхо, которое не на 100% идентично / bin / echo.
Автор: user unknown Размещён: 22.04.2012 12:190 плюса
Как прокомментировано, printf
это предпочтительный вариант , как показано в Git 2.14.x / 2.15 (4 квартал 2017 г.)
printf '%s\n%s' "$FULL_NAME" "$EMAIL"
См. Коммит 1a6d468 (17 сентября 2017 г.) от Torsten Bögershausen ( tboegi
) .
(Объединено Торстеном Бёгерсхаузеном - tboegi
- в коммите 1a6d468 , 21 сентября 2017 г.)
Автор: VonC Размещён: 28.09.2017 08:01
test-lint
:echo -e
(или-E
) не переносимыйНекоторые реализации
echo
поддерживают-e
опцию ' ', чтобы включить интерпретацию обратной косой черты следующей строки.
Кроме того, они поддерживают «-E
», чтобы отключить его.Тем не менее, ни один из них не является переносимым, POSIX даже не упоминает их, и многие реализации не поддерживают их.
Проверка на '
-n
' уже выполненаcheck-non-portable-shell.pl
, расширьте ее, чтобы охватить '-n
', '-e
' или '-E
'.
Вопросы из категории :
- bash Как разрешить символические ссылки в сценарии оболочки
- bash Удалить все, кроме самых последних файлов X в Bash
- bash Распараллелить скрипт Bash с максимальным количеством процессов
- bash Как мне написать цикл для Bash
- bash Как обнулить числа в именах файлов в Bash?
- bash Get the source directory of a Bash script from within the script itself
- bash Как я могу отправить стандартный вывод одного процесса нескольким процессам, используя (желательно безымянные) каналы в Unix (или Windows)?
- bash Обработка ошибок в Bash
- bash Как подавить прекращение сообщения после убийства в bash?
- bash sudo echo "что-то" >> / etc / privilegedFile не работает
- shell Вызов команд оболочки из Ruby
- shell Проверьте, существует ли каталог в сценарии оболочки
- shell Вызов внешней команды в Python
- shell Проверка из сценария оболочки, если каталог содержит файлы
- shell Используйте grep для поиска содержимого в файлах и перемещения их, если они совпадают
- shell Как мне перебрать диапазон чисел, определенных переменными в Bash?