2017-01-26 5 views
0

мне нужно запустить некоторые команды, как указано ниже, и это должно быть отображение на экране, прежде чем выполнить, а затем вывод командыКак распечатать команду перед ее выполнением?

lsuser -f root|grep -i maxage|awk -F= '{print$2}' 

Возвращения 13.

Я попытался как хранить команду в переменной, как показано ниже , но это не сработало.

mxage="lsuser -f root|grep -i maxage|awk -F= '{print$2}'" 
echo "$maxage" 
echo "`$maxage`" 

выход должен быть как:

lsuser -f root|grep -i maxage|awk -F= '{print$2}' 13

+0

Вы хотите запустить _what_ before _what_? – Inian

+0

Извините [Я закрыл как дубликат] (http://stackoverflow.com/posts/41876885/revisions). Я просто сосредоточился на последней части вопроса, в то время как конечная цель здесь явно различна. Спасибо @chepner за отмену. – fedorqui

ответ

0

Во-первых, я бы рекомендовал просто использовать set -x, который регистрирует команды в стандартной ошибки, прежде чем они будут выполнены. Вы можете отключить это после того, как закончите с set +x.

set -x 
lsuser -f root|grep -i maxage|awk -F= '{print$2}' 
set +x 

Недостатки:

  1. Данные записываются в стандартный поток ошибок, а не стандартный вывод. (В более новых версиях bash вы можете указать произвольный файловый дескриптор, установив BASH_XTRACEFD.)
  2. Прослеживается также выполнение set +x.

Если установить значение переменной очень внимательно, вы можете использовать eval.

cmd="lsuser -f root|grep -i maxage|awk -F= '{print\$2}'" 
echo "$cmd" 
eval "$cmd" 

Однако я не рекомендую этот подход. Теоретически возможно правильно установить значение cmd так, чтобы он точно регистрировался и выполнялся правильно и по назначению, но я считаю, что это больше проблем, чем того стоит. (Тем не менее, я жду, когда кто-то покажет, как это сделать легко, я знаю, что это связано с printf и спецификатором %q.)

0

set -x подходит для отладки сценария. Когда вы просто хотите увидеть свою исходную команду, используйте

set -v 
lsuser -f root|grep -i maxage|awk -F= '{print$2}' 
set +v