Я выполняю команду curl [url]
в сценарии оболочки Linux. Я хочу получить код выхода этой команды и ее вывод одновременно, не используя временный файл.Как получить код выхода и стандартную команду linux в то же время
Есть ли способ сделать это?
Я выполняю команду curl [url]
в сценарии оболочки Linux. Я хочу получить код выхода этой команды и ее вывод одновременно, не используя временный файл.Как получить код выхода и стандартную команду linux в то же время
Есть ли способ сделать это?
Я предполагаю, что проблема заключается в том, что у вас есть промежуточная команда, которая вытесняет код выхода последней команды.
Чтобы обойти эту проблему, просто хранить код выхода и стандартный вывод в переменных:
OUTPUT=$(curl example.org)
EXIT_CODE=$?
, то вы можете просто выход их либо в той же строке:
echo "$EXIT_CODE: $OUTPUT"
или называть их по отдельности, как необходимо.
Нет стандартного способа получить статус выхода команды в трубе.
Однако, если вы используете (или можете использовать) Bash в качестве оболочки, встроенная переменная массива PIPESTATUS
содержит результаты самого последнего выполненного конвейера. (Обратите внимание, что одна команда считается здесь конвейером).
Пример:
true | false | false | false; echo "${PIPESTATUS[0]}" "${PIPESTATUS[1]}"
Выход:
0 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
Я оставил ответ, который соответствует вашим критериям вывода и выхода кода без временного файла. Пожалуйста, отредактируйте свой вопрос с более подробной информацией, если у вас есть что-то более конкретное. –