Значением по умолчанию конфигурации git color.ui
является auto
, которое использует цвета только при выводе на TTY. Вы можете изменить это в своей конфигурации на always
, чтобы вывод был окрашен независимо.
Наиболее полезным для вашего варианта использования является опция -c
для git
, которая позволяет переопределить значение конфигурации только для текущей команды. Вы можете использовать это, чтобы установить color.ui
на always
:
.
var=$(git -c color.ui=always status)
printf '%s\n' "$var"
Обратите внимание, что во втором примере
var=$(echo "Text in \n\e[34mBlue")
echo -e $var
на самом деле это строка echo -e
, которая вызывает появление цветов -управляющие коды не были интерпретированы echo
внутри подстановки команды, а обратная косая черта и другие символы были буквально там. Дело не в том, что цветовые коды были сохранены в то время и забыты, когда они пришли из git
-, они были созданы в конце в одном случае и никогда в другом.
( Судя по комментариям... )Ваш администратор сказал вам добавить exec ksh
в ваш файл ~/.profile
, но, похоже, это вам не подходит. Это не работает, потому что ваша оболочка входа в систему bash
будет использовать ~/.bash_profile
вместо ~/.profile
, если первая существует.
Поэтому вместо этого добавьте exec ksh
в файл ~/.bash_profile
.
Лично я бы использовал что-то вроде следующего (, предполагая, что исполняемый файл оболочки ksh
находится по адресу/bin/ksh
):
if [ -x /bin/ksh ]; then
export SHELL=/bin/ksh
exec "$SHELL" -l
fi
Это был бы весь мой файл ~/.bash_profile
, и он бы запускался /bin/ksh
как оболочка входа в систему, если бы /bin/ksh
существовал и был исполняемым. Затем оболочка ksh
заменит оболочку bash
и прочитает ваш файл ~/.profile
и т. д. (, поэтому удалитеexec ksh
из ~/.profile
, если вы добавили его туда ). Ваш файл ~/.bashrc
больше не будет использоваться.
Приведенный выше код оставит вам оболочку bash
, если по какой-то причине оболочка ksh
будет удалена из вашей системы.