2016-08-16 2 views
1

Я использую команду at, чтобы запланировать работу в будущем.Как получить результат команды в HERE_doc в Bash

DoCurlAt() { 
    if [ -n "${AuthToken:-}" ] ; then 
     $4 << 'EOF' 
curl -s -H "${AuthHeader:-}" -H "$1" --data-urlencode "$2" "$3" 
EOF 
     Exitcode=$? 
    fi 
    WriteLog Output Info "AT Output: $AtOutput Exitcode: $Exitcode" 
} 

Как я могу захватить результат at в переменной с именем $ AtOutput?

Я попытался с

AtOutput=$(bash $4 << EOF 
curl -s -H "${AuthHeader:-}" -H "$1" --data-urlencode "$2" "$3" 
EOF 
) 

Но что does't действительно дают никакого результата.

также попытался с:

AtOutput=$(curl -s -H "${AuthHeader:-}" -H "$1" --data-urlencode "$2" "$3" | at "$4") 

Но я предпочел бы использовать здесь-док. функция вызывается с

DoCurlAt "$AcceptJson" "argString=$ArgString" "$ApiUrl/$ApiVersion/job/$JobUid/run" "$OneTime" 

$ одноразовая ($ 4) может быть, например, «в 15:19 сегодня» Выход в основном что-то вроде этого:

job 7 at 2016-08-16 15:30 
+2

Вы не можете записать результат задания, запланированного позднее, с помощью 'at'. – chepner

+0

Мне не нужен результат запланированного задания .... это довольно obviopus, что невозможно. Мне нужен вывод команды at. Пример «job 7 at 2016-08-16 15:30» – willemdh

+0

В чем разница между двумя ветвями выражения 'if'? Трудно следить за тем, каковы ваши намерения. (Кстати, прочитайте [Bash FAQ 50] (http://mywiki.wooledge.org/BashFAQ/050).) – chepner

ответ

1

at пишет стандартную ошибку, не стандартный выход. Используйте перенаправление 2>&1, чтобы сначала скопировать стандартную ошибку на стандартный вывод.

$ at_output=$(echo "cmd" | at "$when" 2>&1) 
Смежные вопросы