Заполнение меню выбора громкости | Bash - PullRequest
0 голосов
/ 06 апреля 2020

Пытаясь получить чистый список томов, смонтированных в системе

Я использовал следующий код для создания массива

volumes=(`df -i | grep -ioh "\Volumes\S*"`)

Проблема в том, что он также возвращает ненужные монтирования, такие как

Тома / Данные / home
Тома / Данные

Эти данные будут использоваться в меню выбора, где пользователь может выбрать внешний диск.

Os: macOs

1 Ответ

0 голосов
/ 06 апреля 2020

Таким образом:

#!/usr/bin/env bash

IFS=$'\n' read -r -d '' -a volumes < <(
  df | head -n -1 | cut -d ' ' -f 1
)
  • IFS=$'\n': Устанавливает I nternal F ield S для перехода на новую строку .
  • read: читает переменную.
    • -r: Не интерпретировать обратную косую черту.
    • -d '': Устанавливает встроенный разделитель записей Bash на ноль.
    • -a volumes: Считывает переменную массива volumes.
    • < <(commands): перенаправляет чтение с выходных данных команд.
  • df: список подключенных томов с информацией.
  • | head -n -1: удаляет строку заголовка из потока.
  • | cut: вырезает поля столбцов из потока.
    • -d ' ': разделяет столбец с пробелом.
    • -f 1: выбирает первый столбец.

В качестве альтернативы, если head Команда не допускает отрицательный индекс, используйте sed 1d, чтобы удалить первую строку для потока:

#!/usr/bin/env bash

IFS=$'\n' read -r -d '' -a volumes < <(
  df | sed 1d | cut -d ' ' -f 1
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...