Основная проблема с вашим сценарием заключается в том, что вы проверяете литеральную строку order
на предмет того, является ли она yes
или нет. Вероятно, вы имели в виду "$order"
.
Другая проблема заключается в том, что вы запускаете этот скрипт, который является скриптом bash
, используя /bin/sh
. /bin/sh
может не понимать некоторых расширений, которые bash
вносит в стандарт оболочки POSIX, но вам может просто повезти. Измените первую строку, чтобы вместо нее использовалось bash
.
Сравнение строк в сценарии оболочки можно выполнить с помощью
if [ "$order" = "yes" ]; then...; fi
Это «дешевле» и легче читать, чем вызов grep
.
Вы также можете использоватьcase... esac
:
case "$order" in
yes)... ;;
no) ... ;;
esac
Относительно -выполнения сценария для повторного запуска является хрупким и очень нетрадиционным. Например, скорее всего, он не будет работать, если скрипт вызывается как bash script.sh
. Лучше ввести цикл, из которого вы выйдете, если пользователь не хочет делать еще одну попытку.
bash
также имеет петлю select
, которую вы можете использовать следующим образом:
echo 'Please select protein from this menu:'
select protein in "beans" "lentils" "tofu" "cheese"; do
if [ -z "$protein" ]; then
echo 'Invalid choice' >&2
else
printf 'You picked %s as protein\n' "$protein"
break
fi
done
Это позволяет лучше контролировать ввод данных пользователем.
Общий подход к чтению интерактивного ввода от пользователя с последующим вопросом о выходе или отказе:
while true; do
read -p 'Enter data: ' -r data
# use "$data" here for something
read -p 'Again? [Y/n] ' answer
case "$answer" in
[Nn]*) break ;;
esac
done
Здесь у вас есть внешний цикл, который задает вопросы и выполняет некоторую обработку. Затем он спрашивает пользователя, хотят ли они пойти еще раз. Если они ответят «Нет» (что-либо, начинающееся с N
или n
), мы break
выбываем из цикла.
Тест в конце также может быть проверкой $data
. Если пользователь ввел неверный ввод в первый read
, вы можете захотеть повторить запрос, пока не будет дан правильный ввод.
Преимущество этого в том, что$data
(или то, что вы читаете ), живо и доступно после цикла ввода,поэтому вместо обработки $data
внутри цикла вы можете сделать это позже.
Псевдокод:
input-loop:
read-data
validate-data
if-valid exit input-loop
goto input-loop
main-code:
use-validated-data
Убедитесь, что у вас установлены инструменты сборки:
pacman -S base-devel
(нажмите Enter, чтобы установить все)
Загрузите исходный код ядра изhttps://www.kernel.org/
Распаковать tar в /usr/src/
или/usr/local/src
(т.е.tar xvJf linux-5.6.5.tar.xz
)
перейдите в новый каталог/usr/src/linux-5.6.5
введитеmake menuconfig
(найдите здесь свои настройки KASAN и измените их )сохраните .config
файл и выйдите (или, если вы его не нашли :отредактируйте .config
файл в своем любимом редакторе и установите Настройка KASAN осуществляется поиском по ключевому слову и изменением значения ).
Вот руководство по сборке ядра способом манджаро.
https://forum.manjaro.org/t/how-to-compile-the-mainline-kernel-the-manjaro-way/51700
Делайте резервные копии!
Удачи.