Получение кода выхода из curl в скрипте bash

Я сделал резервную копию всех своих данных и переустановил дистрибутив, на этот раз в графической среде по умолчанию. Я думаю, что это была неправильная конфигурация, поэтому закрываю этот вопрос. Я настоятельно рекомендую следовать руководству по установке дистрибутива по умолчанию, если вы новичок, и как только ваш дистрибутив будет готов к работе, настройте все, что вам нравится (или используйте виртуальную машину). Но всегда имейте под рукой внешний жесткий диск / USB для резервного копирования!

0
13.03.2019, 23:41
2 ответа

Не могу сказать, что это элегантно, но я бы сделал так:

#!/bin/bash
curl -s http://127.0.0.1:8000/simple.sh | /bin/bash -s >/dev/null 2>&1
rc=$?
if [ -z "$rc" ]
then
    echo "Good"
    exit 0
else
    echo "Bad"
    exit 1
fi


Мне кажется, то, как вы это делаете, похоже на выполнение файла here -внутри конструкции $ (... ). Никогда не пробовал, не уверен, что bash так работает.

Разрешение curl отображать содержимое файла и передавать его по конвейеру в учетные записи bash для текстового вывода команды curl, что позволяет bash выполнить ее.

Держу пари, что если вы попробуете это, вы получите те же результаты:

$( cat /[path]/simple.sh ); echo $?
1
28.01.2020, 02:22

Ваша идея верна, но вы, кажется, определили неправильное условие для проверки кода возврата с помощью [ -z "$?" ], которое проверяет, является ли строка кода возврата пустой или нет. Независимо от результата вывода curl, ваш $?будет содержать значение, которое означает, что вы никогда не будете утверждать условие ifвашего скрипта. Вероятно, вам нужно проверить код возврата, который curlвозвращает непосредственно в вашем скрипте

$(curl -s http://127.0.0.1:8000/simple.sh)
if [ "$?" -eq 0 ]; then

или даже более лаконично, без оператора test, чтобы можно было напрямую использовать код возврата в условии if

if curl -s http://127.0.0.1:8000/simple.sh 2>&1 >/dev/null; then
2
28.01.2020, 02:22

Теги

Похожие вопросы