2014-02-02 2 views
1

я застрял с довольно глупым Баш скрипт:назначить неполную команду переменной/Баш

CMD="get database"/ #embedded,specific platform command 
DATA="tree path Uo5 Uu7" 

custom_command='grep -i Arte | awk -F '[:]' '{print $2}' 

И это то, что я хочу сделать:

VAR=`$CMD "show data $DATA" | $custom_command` <--not working 
VAR=`$CMD "show data $DATA" | grep -i Arte | awk -F '[:]' '{print $2}'` <--working 

Использование $ custom_command ломает сценарий , Как я могу использовать $ custom_command для VAR?

Я использую custom_command, чтобы избежать повторения одной и той же строки. Вы можете помочь?

ответ

0

Вы можете сделать это:

custom_command="awk -F':' '/Arte/ {print \$2}'" 
var=$(eval "$CMD 'show data $DATA' | $custom_command") 

или иначе без eval:

custom_command="/Arte/ {print \$2}" 
var=$("$CMD" 'show data $DATA' | awk -F':' "$custom_command") 
  • Вы на самом деле не поставлять любой входной файл/данные в вашей команде Grep
  • Однако есть нет никакой реальной потребности grep здесь, так как awk может обрабатывать часть поиска также
+0

Спасибо, но на самом деле команда больше, просто разместил ярлык. Так что мне действительно нужно иметь пользовательскую команду внутри переменной ... это большая проблема. (я буду использовать свой путь, сократить его - кстати :)) Вы думаете, что я мог бы просто использовать пользовательскую команду, а затем добавить <иметь в качестве входных данных: <$ CMD "показать данные $ DATA" – aprin

+0

Я уверен, что '$ CMD' может представлять любую командную строку здесь. – anubhava

+0

Я хочу $ custom_command, а не $ CMD;) Pipe не работает для этого: grep: |: Нет такого файла или каталога grep: awk: Нет такого файла или каталога grep: '[=,]': Нет такой файл или каталог grep: '{print: Нет такого файла или каталога grep: $ 2}' |: Нет такого файла или каталога grep: sort: Нет такого файла или каталога grep: |: Нет такого файла или каталога grep: grep: Нет такого файла или каталога grep: [0-9]: Нет такого файла или каталога – aprin

0

Вам нужно сделать eval. Что-то вроде:

FINAL_CMD="$CMD show data $DATA | $custom_command" 
VAR=$(eval $FINAL_CMD) 

Или адаптировать его больше к вашему вопросу, попробуйте:

VAR=`$CMD "show data $DATA" | eval $custom_command` 
+0

Но eval is evil –

+0

Спасибо! – aprin

3

Вы не хотите, чтобы назначить команды на переменные в bash. Вы хотите написать функции.

custom_command() { 
    grep -i Arte | awk -F '[:]' '{print $2}' 
} 
+0

Действительно. Я пробовал это, но я не знаю, как использовать функцию для вывода.:/ – aprin

+0

Как и любая другая команда. '... | custom_command' будет делать.BTW '$ CMD' также должна быть функцией. –

+0

работает отлично, спасибо .. !! Теперь есть специальная причина использовать функции вместо «eval» ниже? ;) Какой самый «изящный» способ? – aprin

Смежные вопросы