Это частичный ответ, который работает в целом, но задыхается от специальных символов.
#!/bin/sh
case $1 in
red) col=$'\e[1;31m' ;;
green) col=$'\e[1;32m' ;;
yellow) col=$'\e[1;33m' ;;
blue) col=$'\e[1;34m' ;;
magenta) col=$'\e[1;35m' ;;
cyan) col=$'\e[1;36m' ;;
esac
printf "%s" "${col}"
shift
eval $@
Предполагая, что он называется set-color
, просто вызовите его с set-color red hostname
.
printf
. shift
удаляет первый параметр, переданный в скрипт (то есть цвет). eval $@
затем выполняет остальную часть скрипта. Проблема в том, что сценарий съедает escape-символы и кавычки. например если вы нормально выполнили.
grep "foo bar" file\ name
Тогда вам придется использовать
set-color red grep \"foo bar\" file\\ name