Я сделал резервную копию всех своих данных и переустановил дистрибутив, на этот раз в графической среде по умолчанию. Я думаю, что это была неправильная конфигурация, поэтому закрываю этот вопрос. Я настоятельно рекомендую следовать руководству по установке дистрибутива по умолчанию, если вы новичок, и как только ваш дистрибутив будет готов к работе, настройте все, что вам нравится (или используйте виртуальную машину). Но всегда имейте под рукой внешний жесткий диск / USB для резервного копирования!
Не могу сказать, что это элегантно, но я бы сделал так:
#!/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 $?
Ваша идея верна, но вы, кажется, определили неправильное условие для проверки кода возврата с помощью [ -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