Это случилось со мной, когда я инициализировал коробку Vagrant, которая использовала Debian "Jessie".
Следуя ответу Стивена Китта , переход на archive.debian.org у меня сработал, но мне пришлось добавить его в /etc/apt/sources.list.d/jessie-backports.list
, а не в /etc/apt/sources.list
.
Я добавил следующую строку вprovision.sh
:
echo "deb http://archive.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list
Затем я также получил ошибку безопасности apt-get update
.
В соответствии с Как обойти проблему «Срок действия файла с истекшим сроком действия» на локальном зеркале , это устранило эту ошибку:
apt-get -o Acquire::Check-Valid-Until=false update
В качестве альтернативы, чтобы навсегда отключить проверки, добавьте это вprovision.sh
:
echo "Acquire::Check-Valid-Until \"false\";" > /etc/apt/apt.conf.d/100disablechecks
Затем вы можете выполнять все команды apt
без флага -o
.
Обратите внимание, как заканчивается ваш цикл, если пользователь вводит строку red
? Это означает, что когда цикл закончится, $favorite
будетred
(или пользователь нажмет Ctrl+D и $favorite
будет пустым ).
Самое простое изменение, которое вы могли бы внести в свой код (, игнорируя возможность выхода из цикла с помощью Ctrl+D ), заключалось бы в выводе строки в конце скрипта:
#!/bin/sh
printf 'What is my favorite color? ' >&2
read favorite
while [ "$favorite" != "red" ]; do
echo "Nope, try again."; read favorite
done
echo "That's right!"
Я также покончил с echo -n
и заменил его более стандартным вызовом printf
, который дополнительно печатает стандартную ошибку (как подсказки, которые должны быть напечатаны ). Если вы используете bash
, вы можете использовать read -p 'Enter color: ' color
, чтобы задать пользователю вопрос и прочитать цвет за один раз.
Если вы хотите решить эту проблему правильно, выполните цикл с проверкой ввода, как это обычно делается:
#!/bin/sh
while true; do
printf 'Enter color: ' >&2
read color
if [ "$color" = "red" ]; then
break
fi
echo 'Nope, try again'
done
echo "That's correct!"
Обратите внимание, что теперь цикл стал бесконечным и завершается только оператором break
? Это останавливает пользователя от выхода из цикла с помощью Ctrl+D и требует, чтобы он вместо этого ввел правильный ввод. При вводе неверного ввода у пользователя дополнительно снова запрашивается цвет.
Это гарантирует, что после цикла $color
будет red
.
Вы должны использовать свою логику внутри цикла while-
while true; do
echo -n "What is my favorite color? "
read favorite
if [[ $favorite == "red" ]]; then
echo "That's Right"
exit 0
fi
echo "No, try again."
done