2016-04-21 2 views
2

Сейчас часть кода в моем файле .zshrc выглядит следующим образом:Как определить последовательность команд bash как строку?

inetFunction(){ 
    echo ${LRED}IP Address:${NC} 
    ifconfig en0 | grep "inet " | awk '{print $2}' 
} 

$ LRED определяется как изменение цвета на светло-красный, и $ NC устанавливает его обратно в нормальное русло. Я реализую inetFunction с кодом alias inet='inetFunction'. Выходной сигнал команды

IP Address: 
xx.x.xx.xxx 

где «IP-адрес:» находится в красном цвете. Я хотел сделать Адресную зеленый IP, но по какой-то причине, когда я пытаюсь какой-либо из них, он не работает:

${GREEN}ifconfig en0 | grep "inet " | awk '{print $2}' 

ifconfig en0 | grep "inet " | ${GREEN}awk '{print $2}' 

${GREEN}ifconfig en0 | grep "inet " | awk '{${GREEN} print $2}' 

Я даже попытался установить все к переменной, как:

variable='ifconfig en0 | grep "inet " | awk '{print $2}'' 

, а затем пытается сделать echo ${GREEN} $variable, но он все еще не работает.

Любые идеи?

+3

Знаете ли вы, что Grep | AWK это глупо антишаблоном? awk может выполнить grepping: 'ifconfig en0 | awk '/ inet/{print $ 1}' '. Экономит дорогостоящую вилку и трубу. – Jens

ответ

2

$GREEN необходимо отразить. Это набор цветовых кодов ANSI, которые ваш терминал распознает как сигнал для изменения цвета текста.

echo -n "$GREEN" 
ifconfig en0 | grep "inet " | awk '{print $2}' 
echo -n "$NC" 

Или, конденсируется:

echo "$GREEN$(ifconfig en0 | grep "inet " | awk '{print $2}')$NC" 

Кроме того, как @Jens указует, можно объединить в GREP и AWK команде следующим образом:

echo "$GREEN$(ifconfig en0 | awk '/inet/{print $2}')$NC" 
0

Как уже отмечался в John Kugelman's answer${GREEN} потребностях для печати.

Как вы все равно работает awk, вы можете просто позволить ей сделать работу:

ifconfig en0 | awk '/inet/{print "'${GREEN}'" $2 "'${NC}'"}' 
ifconfig eno1 | awk "/inet/{print \"${GREEN}\" \$2 \"${NC}\"}" 

Это позволяет лучше контролировать, что цвет, особенно с более сложными awk программ.

Очевидно, что для этого необходимо всего лишь красивое цитирование. $2 должен быть указан из оболочки, чтобы он мог быть распознан awk. ${GREEN} и ${NC} не должны быть указаны из оболочки, чтобы их можно было заменить оболочкой. Но поскольку теперь они всего лишь строки awk, они должны быть внутри двойных кавычек для awk; эти двойные кавычки также необходимо указывать из оболочки.

Для simplyfy это вы можете передать набор переменных для awk в командной строке с параметром -v variable=value:

ifconfig en0 | awk -v green="$GREEN" -v nc="$NC" '/inet/{print green $2 nc}'