2016-03-01 4 views
0

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

red=`tput setaf 1` 
reset=`tput sgr0` 
string=$(sed "${line_num}q;d" $file) 
printf "%s" "$string" 

Edit: для ясности, строка в $file на line_num является ${red}tin2${reset}

и выход я получаю это:

${red}tin2${reset} 

Если я вместо этого сделать string="${red}tin2${reset}" вывод будет просто tin2 (цвет красного текста). Поэтому я не уверен, почему $ {red} не выполняется в моем первом случае, когда кажется, что он сохраняется в строке.

+0

Добавить ** exec $ string ** после строки printf. –

+0

Не работает: строка 14: exec: $ {red} tin2 $ {reset}: не найдено – mtveezy

+0

Извините, я имел в виду ** eval ** Я думал в perl, что очень похоже. –

ответ

0

Ну, нашел уродливое решение. Сделайте строку printf "%s" "$string" и строку eval.

red=`tput setaf 1` 
reset=`tput sgr0` 
string=$(sed "${line_num}q;d" $file) 
string2="printf \"%s\" \"$string\"" 
eval $string2 
Смежные вопросы