Команды laravel artisan не отображают цвета

При использовании команд laravel artisan я не получаю ожидаемого цветного вывода.

Если вы посмотрите на http://laravel.com/docs/4.2/commands, там написано: " Чтобы отправить вывод на консоль, вы можете использовать методы информации, комментариев, вопросов и ошибок. Каждый из этих методов будет использовать соответствующие цвета ANSI для своих целей».

Но используя терминалы minty или cmd, я не получаю эти цвета.

Например, $this->error('Something went wrong!'); должен выводить текст с красным фоном.

Чего не хватает, чтобы я получил эту цветовую функциональность?


person trogne    schedule 02.04.2015    source источник
comment
Инструменты, основанные на symfony/console, принимают флаг --no-ansi (для подавления вывода управляющих кодов ANSII).   -  person Top-Master    schedule 07.12.2020


Ответы (4)


Я знаю, что это старый ответ, но другие ответы здесь не очень качественные


Эта проблема:

Как вы заметили, родная командная строка Windows не поддерживает цвета ANSI. Здесь вы можете найти другой ответ SO с более подробной информацией и полезными ссылками, но вот важная выдержка:

ANSI.SYS также работает в системах, производных от NT, для 16-битных устаревших программ, выполняемых под NTVDM.

Консоль Win32 вообще не поддерживает управляющие последовательности ANSI. Программное обеспечение, такое как Ansicon, может, тем не менее, выступать в качестве оболочки стандартной консоли Win32 и добавлять поддержку управляющих последовательностей ANSI. .

Решение (простое):

Ансикон

Как упоминалось в отрывке, программное обеспечение Ansicon используется для добавления поддержки цветов ANSI в терминалы Windows. Я не использовал его, но, похоже, он добавляет функциональности существующим консолям.

ANSICON предоставляет escape-последовательности ANSI для консольных программ Windows. Он предоставляет почти те же функции, что и ANSI.SYS для MS-DOS.

Тем не менее, вам, похоже, нужно запустить команду ansicon, когда вы хотите использовать цветовую кодировку ANSI:

Например, чтобы отобразить файл .ans, используя черный на голубом в качестве цвета по умолчанию:

ansicon -m30 -t file.ans

Другое решение (более простое):

командник

Командир в действии

Как видите, он поддерживает цвета ANSI, но также имеет много других полезных встроенных функций. Он также эмулирует некоторые функции Unix.

Cmder, безусловно, мой личный фаворит.

person Martin    schedule 13.09.2016
comment
d= (◕‿↼ ) Я пытаюсь заставить ansicon работать с git-bash.exe (потому что Git bin/sh.exe не поддерживает параметр --cd), но, похоже, не работает ﴾͡๏̯͡๏﴿ - person Top-Master; 07.12.2020
comment
Наконец, потому что цвета cmd, кажется, работают после глобальной установки ansicon (запустив ansicon.exe -i), я создал ярлык с %windir%\system32\cmd.exe /s /k pushd "C:\my-project-root" в качестве пути (вместо использования Git-bash с параметром --cd). - person Top-Master; 07.12.2020

Попробуйте использовать putty. Это бесплатный ssh-клиент для Windows.

person mirza    schedule 03.04.2015

Ссылка из symfony/console: 2.*| 3.*|4.*

/**
     * Returns true if the stream supports colorization.
     *
     * Colorization is disabled if not supported by the stream:
     *
     *  -  Windows before 10.0.10586 without Ansicon, ConEmu or Mintty
     *  -  non tty consoles
     *
     * @return bool true if the stream supports colorization, false otherwise
     */
    protected function hasColorSupport()
    {
        if (DIRECTORY_SEPARATOR === '\\') {
            return
                0 >= version_compare('10.0.10586', PHP_WINDOWS_VERSION_MAJOR.'.'.PHP_WINDOWS_VERSION_MINOR.'.'.PHP_WINDOWS_VERSION_BUILD)
                || false !== getenv('ANSICON')
                || 'ON' === getenv('ConEmuANSI')
                || 'xterm' === getenv('TERM');
        }

        return function_exists('posix_isatty') && @posix_isatty($this->stream);
    }

Если вы используете ternimal в клиенте linux/macos, вам необходимо установить и включить расширение php_posix, чтобы сделать posix_isatty() доступным на удаленном сервере.

$ yum install php-process

Если вы используете окно, значение DIRECTORY_SEPARATOR равно \\. Ответ Мартина должен работать, потому что getenv('ANSICON') вернет ture.

person CloudyCity    schedule 08.09.2020

Это магия терминала в Linux. вот почему я люблю линукс. просто для удовольствия. Потому что вы используете окна. По умолчанию cmd имеет только черный и белый цвета. вы можете использовать ansicon, чтобы показать цвет команды. В моем случае я использую git bash для запуска команды laravel. он также показывает цвет.

person Tam Nguyen    schedule 03.04.2015
comment
Я пробовал ansicon с windows 7 и cygwin. Не работает. Работает ли это для вас ? Пожалуйста, скажите мне, как вы это делаете. - person trogne; 05.04.2015
comment
ansicon работает с cmd. насчет cygwin я понятия не имею. - person Tam Nguyen; 08.04.2015
comment
Такие комментарии почему я люблю линукс. просто для удовольствия. не принадлежат ответам StackOverflow - person Martin; 13.09.2016