/usr/bin/grub -probe :ошибка :не удалось получить канонический путь `/'

Во втором примере используется цикл whileс перенаправленным вводом.

Он читается как < "$tmpFile", и многие оболочки создают для этого случая дополнительную оболочку -. Вы можете попробовать запустить этот скрипт с помощью ksh93. ksh93не создает вложенную оболочку -в этом случае.

В вашем конкретном случае причина совсем в другом:

  • в первом примере вы читаете одну строку из ввода

  • во втором примере вы читаете до EOF

Команда readсчитывает ввод, затем разбивает ввод на IFSсимволов, а затем присваивает слова переменным аргументам read.

Если слов в качестве параметров команды readбольше, чем переменных, последняя переменная получает конкатенацию остальных слов.

Если слов меньше, чем переменных, другим переменным присваивается пустое значение.

Поскольку вы нажали EOF, у вас не было считанного слова, кроме одной или нескольких переменных в качестве аргумента для read. Это приводит к тому, что всем переменным присваивается пустое значение.

Итак, произошло нечто, чего вы не ожидали.:EOFприводит к завершению цикла while, и вы не видите команды echoвнутри цикла while, а только последнюю команду echoпосле while. ] в этом случае EOF.

Этот окончательный вариант echoтеперь печатает содержимое переменной, которое было очищено от нажатия EOF.

0
26.06.2021, 10:10
1 ответ

Оказывается, chroot Void не распознают блочные устройства внутри chroot. По-видимому, у Void есть отдельная команда xbps-uchroot, которая обрабатывает это должным образом. Решение состоит в том, чтобы использовать xbps-uchrootвместо обычного chroot.

0
28.07.2021, 11:22

Теги

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