2015-02-24 2 views
0

Я пытаюсь перебрать список серверов и вместо того, чтобы вручную вводить каждый в текстовый файл, я хотел использовать выражение.Проблема с выражением в for Loop-Bash

Пример:

[[email protected] ~]$ for i in server{001..010} ; do echo $i ; done 
server001 
server002 
server003 
server004 
server005 
server006 
server007 
server008 
server009 
server010 

, который производит желаемый результат. Однако, когда я ставлю сервер {001..010} в файл .txt и попытаться сделать то же самое, он не работает:

[[email protected] ~]$ cat server_test2.txt 
server{001..010} 
[[email protected] ~]$ for i in `cat server_test2.txt` ; do echo $i ; done 
server{001..010} 

Как вы можете видеть, что это фактически не обрабатывает выражение Кстати, я бы хотел.

Любые идеи, как я могу экстраполировать из txt-файла с несколькими строками серверов с использованием метода выражения? {001..010}

+0

Порядок действий. Выход из подстановки команды не расширяется. –

+0

См. Http://stackoverflow.com/questions/9337489/bash-curly-brace-expansion-with-variable-for-mkdir – chrisinmtown

+0

Здесь перечислены порядок расширений: https://www.gnu.org/software /bash/manual/bashref.html#Shell-Expansions –

ответ

0

Вы можете использовать eval; например:

list=$(cat server_test2.txt) 
CMD="for i in $list ; do echo \$i; done" 
eval $CMD 
+0

Это отлично поработало, спасибо! Я должен буду прочитать на eval, чтобы понять, почему:) –

+0

'man eval' должен помочь вам на вашем пути: он« оценивает »строку как команду. Как отмечалось в смежных вопросах; это «опасная» команда, хотя –

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