сценарий bash: передача аргументов в mkfs

Я пишу сценарий bash для форматирования разделов. Одна из команд, которую я хочу запустить, следующая:

mkfs.btrfs -f -m single -L root /dev/sda1

поэтому я разделил эту команду на часть опций:-f -m single -L root
и раздел часть:/dev/sda1
и поместите их в переменные, как это:

mkfs.btrfs "${myoptions}" /dev/"${mypartition}"

но он терпит неудачу с:

mkfs.btrfs: invalid option -- ´ ´

Я пробовал различные варианты его, как положить 2 части в двойные кавычки, но все терпит неудачу. Я также попытался поместить две части в массив и запустить его так:

mkfs.btrfs "${array[1]}" "${array[2]}"

или такой:

mkfs.btrfs "${array[*]}"

но это также не удается.

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

30
задан coverflower
24.02.2023 12:53 Количество просмотров материала 3337
Распечатать страницу

2 ответа

Я также попытался поместить две части в массив...

недостаточно хорошо. каждый аргумент должен быть элемент массива (или значение переменной).

args1=(-f -m single -L root)
args2=/dev/"$mypartition"
mkfs.btrfs "${args1[@]}" "$args2"
3
отвечен Ignacio Vazquez-Abrams 2023-02-25 20:41

такого рода вещи-это всегда огромная боль для меня. В этом случае, поскольку ни один из ваших аргументов не имеет пробелов, я бы попытался удалить двойные кавычки и позволить Bash разбить его на слова для вашего $myoptions переменной. Так это:

mkfs.btrfs ${myoptions} /dev/"${mypartition}"

с двойными кавычками вы получаете одно поле,-f -m single -L root содержащие пробелы. Без него он должен быть разбит на отдельные поля -f -m single -L и root и показать такое же поведение, как введите mkfs.btrfs -f -m single -L root /dev/sda1 в интерактивной оболочке.

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

вы также можете использовать специальную переменную $@ у которой есть свои правила.

Я пишу все свои вещи оболочки в POSIX, хотя я уверен, что есть более простой способ сделать это в Bash.

0
отвечен BytePorter 2023-02-25 22:58

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх