2015-06-16 3 views
0

У меня следующая команда:xargs эха цветного вывод

somethingRegex | xargs -I {} sh -c 'echo -e "found \e[34m{}\e[39m";dummy {}' 

Цвета часть эха не работает, пример вывод:

-e found \e[34mresult\e[39m 
dummy output 
repeat 

Простое эхо делает работу с {} хорошее голубое

echo -e "found \e[34m{}\e[39m" 

Как исправить это?

ответ

1

Возможно, это для Linux (хотя OSX добавляет интересный поворот, изменяя роли bash и echo).

Линукс /bin/echo имеет -e вариант, который расширяет побеги сорта вы показываете, в то время как некоторые оболочки (такие как dash, используемых в Debian) следует POSIX более внимательно, и не делать этого. Программа find действует так, как будто она запускает /bin/sh, что может не быть вашей реальной оболочкой. Debian использует dash как /bin/sh.

Аналогично, более старые версии bash (мой локальный OSX-сервер с 3.2.53) не поддерживают параметр -e, в то время как более новые (проверяя мой локальный Debian с 4.1.5) поддерживают опцию -e.

Поскольку все такое поведение является нестандартным, обычная рекомендация использовать printf утилиту, которая также обеспечивает нестандартные функции на Linux, но те части, которые вы потребность будет достаточно портативный:

somethingRegex | xargs -I {} sh -c 'printf "found \033[34m{}\033[39m";dummy {}' 
+0

Спасибо, что работает. +1 для справочной информации. – janw