2015-08-27 2 views
1

Я выполняю команду curl [url] в сценарии оболочки Linux. Я хочу получить код выхода этой команды и ее вывод одновременно, не используя временный файл.Как получить код выхода и стандартную команду linux в то же время

Есть ли способ сделать это?

+0

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

ответ

4

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

Чтобы обойти эту проблему, просто хранить код выхода и стандартный вывод в переменных:

OUTPUT=$(curl example.org) 
EXIT_CODE=$? 

, то вы можете просто выход их либо в той же строке:

echo "$EXIT_CODE: $OUTPUT" 

или называть их по отдельности, как необходимо.

0

Нет стандартного способа получить статус выхода команды в трубе.

Однако, если вы используете (или можете использовать) Bash в качестве оболочки, встроенная переменная массива PIPESTATUS содержит результаты самого последнего выполненного конвейера. (Обратите внимание, что одна команда считается здесь конвейером).

Пример:

true | false | false | false; echo "${PIPESTATUS[0]}" "${PIPESTATUS[1]}" 

Выход:

0 1 
1

(. У меня нет достаточного количества очков репутации прокомментировать ответ user559633 в)

Видимо, это не будет работать, если вы отправьте STDOUT на местную переменную:

test.sh:

#!/bin/bash 

function test1() { 
    OUTPUT=$(ping -c 1 -W 1 blah.org) 
    EXIT_CODE=$? 
    echo "$EXIT_CODE: $OUTPUT" 
} 

function test2() { 
    local OUTPUT=$(ping -c 1 -W 1 blah.org) 
    EXIT_CODE=$? 
    echo "$EXIT_CODE: $OUTPUT" 
} 

test1 
test2 

Выход:

# ./test.sh 
1: PING blah.org (205.150.150.140) 56(84) bytes of data. 

--- blah.org ping statistics --- 
1 packets transmitted, 0 received, 100% packet loss, time 0ms 
0: PING blah.org (205.150.150.140) 56(84) bytes of data. 

--- blah.org ping statistics --- 
1 packets transmitted, 0 received, 100% packet loss, time 0ms 

Обратите внимание на ExitCode от test1 является 1, но для test2, это 0.

EDIT: Кажется, что отделение местной декларации от задания заботится об этом :

#!/bin/bash 

function test1() { 
    OUTPUT=$(ping -c 1 -W 1 blah.org) 
    EXIT_CODE=$? 
    echo "$EXIT_CODE: $OUTPUT" 
} 

function test2() { 
    local OUTPUT 
    OUTPUT=$(ping -c 1 -W 1 blah.org) 
    EXIT_CODE=$? 
    echo "$EXIT_CODE: $OUTPUT" 
} 

test1 
test2 

Выход:

1: PING blah.org (205.150.150.140) 56(84) bytes of data. 

--- blah.org ping statistics --- 
1 packets transmitted, 0 received, 100% packet loss, time 0ms 
1: PING blah.org (205.150.150.140) 56(84) bytes of data. 

--- blah.org ping statistics --- 
1 packets transmitted, 0 received, 100% packet loss, time 0ms