Двойная загрузка с Windows блокирует разделы NTFS

exec 10<&0клонирует дескриптор файла с номера 0 в номер 10, эффективно сохраняя оригинал, чтобы вы могли заменить файл на fd 0 в следующей строке. Чтобы отменить это, вам нужно поменять местами числа, клонировать номер 10 в номер 0, exec 0<&10(, а затем закрыть fd 10 с помощьюexec 10<&-).

С другой стороны, exec 0<10без амперсанда — это просто перенаправление с именем файла 10. Поскольку у вас нет такого файла, вы получите сообщение об ошибке.


Тем не менее, вам не нужно использовать execдля временной настройки перенаправления для цикла while. Составные команды также могут принимать перенаправления, например:

while read LINE; do
   ...
done < "$filename"

Если вы хотите читать полные строки, как они есть, без пробелов или обратной косой черты, влияющих на данные, вам нужно сбросить IFSдля readи использовать read -r. Кроме того, если вы добавляете к массиву, вам не нужно вручную следить за индексами, вы можете просто использовать +=для добавления непосредственно в массив:

arr=()   # declares it an array and clears it, not strictly necessary though
while IFS= read -r line; do
    arr+=("$line")
done < "$filename"

Или используйтеmapfile(readarray)вместо ручного цикла, как @BlackJack упоминает в комментариях:

mapfile -t arr < "$filename"

Или вообще без временного файла:

#/bin/bash
mapfile -t arr < <(curl -s https://unix.stackexchange.com/)

(Без -tmapfileоставляет ограничители строк на месте.)

2
25.01.2021, 04:07
1 ответ

Изучая эту тему, я нашел только обходные пути, а не настоящие решения, о которых вы просите:

  1. Переформатируйте раздел в FAT32 или
  2. Размонтировать раздел перед переходом в спящий режим.

Если вам нужна поддержка больших файлов -, то есть > 4 ГБ -, вы можете попробовать использовать exFAT вместо FAT32.

2
18.03.2021, 22:34

Теги

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