История изменений
Исправление Kroz, (текущая версия) :
sfdisk и parted я пробовал - читай выше
А вот тут люди создают нормально из скрипта:
- https://unix.stackexchange.com/questions/726817/parted-is-it-correct-to-create-disk-partitions-in-linux-only-by-percentage
- https://unix.stackexchange.com/questions/234859/how-to-create-a-partition-in-free-space-using-gnu-parted
Сможешь адаптировать?
И на всякий случай: parted -m "$dsk" print
// и чем скрипт-то не понравился?..
Всем.
Во-первых, когда пишешь скрипт, нельзя использовать команды, которые предполагают интерактивный ввод. Это потому, что интерактивный ввод - для мясных людей: программа может запросто сбрасывать буффер перед вводом, при очредом арейде формат ввода/вывода может леко поменяться и т. п. Для бездушных машин и их скриптов есть параметры командной строки (ну и разные API). Поэтому, перед использованием fdisk люди как правило ищут аналог, который позволяет делать то же, но через параметры коммандной строки. И такое есть: parted. В очень редких случаях, когда альтернативы нет, используют expect.
Во-вторых, твой скрипт вознамерился делать достаточно опасные вещи, а меж тем в нём нет совсем обработки ошибок. Ты или senior 100500 левела, или пока ещё не научен жизнью. Ладно, люди ленивые создания, но поставь хотябы set -e
в начало скрипта.
Зачем sudo перед fdisk? sudo вообще в скриптах нельзя ипользовать. Во-первых он предполагает интерактивный ввод. Во-вторых, даже если это обойти, если скрипт требует рутовых привелегий , то пользователь должен сам скрипт запустить от рута. И тебя не смущает, что sudo есть перед fdisk, но отсутствует, например, перед mount и mkfs.ext4?
sync
- зачем? reboot
- точно нужен? fdisk и parted делают тебе готовые для использования разделы.
Далее, есть вещи, которые у опытных людей просто на автомате. Например, заключать все переменные, да и все строки в двойные кавычки. Использовать конструкцию вида $( ... )
вместо обратных кавычек. Почему ты используешь sh-вариант условий [ ... ]
вместо bash [[ ... ]]
? В grep в скриптах лучше обозначать начало и конец паттерна, то есть grep ' LIVEBOOT_HOME '
в твём случае, если я всё правильно понял в твоём варианте (я уже молчу о том, что как правило всё можно найти намного проще через /dev; если это метка, то dev/disk/by-label/
).
Исправление Kroz, :
sfdisk и parted я пробовал - читай выше
А вот тут люди создают нормально из скрипта:
- https://unix.stackexchange.com/questions/726817/parted-is-it-correct-to-create-disk-partitions-in-linux-only-by-percentage
- https://unix.stackexchange.com/questions/234859/how-to-create-a-partition-in-free-space-using-gnu-parted
Сможешь адаптировать?
И на всякий случай: parted -m "$dsk" print
// и чем скрипт-то не понравился?..
Всем.
Во-первых, когда пишешь скрипт, нельзя использовать команды, которые предполагают интерактивный ввод. Это потому, что интерактивный ввод - для мясных людей: программа может запросто сбрасывать буффр перед вводом, при очредом арейде формат ввода/вывода может леко поменяться и т. п. Для бездушных машин и их скриптов есть параметры командной строки (ну и разные API). Поэтому, перед использованием fdisk люди как правило ищут аналог, который позволяет делать то же, но через параметры коммандной строки. И такое есть: parted. В очень редких случаях, когда альтернативы нет, используют expect.
Во-вторых, твой скрипт вознамерился делать достаточно опасные вещи, а меж тем в нём нет совсем обработки ошибок. Ты или senior 100500 левела, или пока ещё не научен жизнью. Ладно, люди ленивые создания, но поставь хотябы set -e
в начало скрипта.
Зачем sudo перед fdisk? sudo вообще в скриптах нельзя ипользовать. Во-первых он предполагает интерактивный ввод. Во-вторых, даже если это обойти, если скрипт требует рутовых привелегий , то пользователь должен сам скрипт запустить от рута. И тебя не смущает, что sudo есть перед fdisk, но отсутствует, например, перед mount и mkfs.ext4?
sync
- зачем? reboot
- точно нужен? fdisk и parted делают тебе готовые для использования разделы.
Далее, есть вещи, которые у опытных людей просто на автомате. Например, заключать все переменные, да и все строки в двойные кавычки. Использовать конструкцию вида $( ... )
вместо обратных кавычек. Почему ты используешь sh-вариант условий [ ... ]
вместо bash [[ ... ]]
? В grep в скриптах лучше обозначать начало и конец паттерна, то есть grep ' LIVEBOOT_HOME '
в твём случае, если я всё правильно понял в твоём варианте (я уже молчу о том, что как правило всё можно найти намного проще через /dev; если это метка, то dev/disk/by-label/
).
Исходная версия Kroz, :
sfdisk и parted я пробовал - читай выше
А вот тут люди создают нормально из скрипта:
- https://unix.stackexchange.com/questions/726817/parted-is-it-correct-to-create-disk-partitions-in-linux-only-by-percentage
- https://unix.stackexchange.com/questions/234859/how-to-create-a-partition-in-free-space-using-gnu-parted
Сможешь адаптировать?
И на всякий случай: parted -m "$dsk" print
// и чем скрипт-то не понравился?..
Всем.
Во-первых, когда пишешь скрипт, нельзя использовать команды, которые предполагают интерактивный ввод. Это потому, что интерактивный ввод - для мясных людей. А для железных машин есть параметры командной строки, ну и разные API. Поэтому, перед использованием fdisk люди как правило ищут аналог, который позволяет делать то же, но через параметры коммандной строки. И такое есть: parted. В очень редких случаях, когда альтернативы нет, используют expect.
Во-вторых, твой скрипт вознамерился делать достаточно опасные вещи, а меж тем в нём нет совсем обработки ошибок. Ты или senior 100500 левела, или пока ещё не научен жизнью. Ладно, люди ленивые создания, но поставь хотябы set -e
в начало скрипта.
Зачем sudo перед fdisk? sudo вообще в скриптах нельзя ипользовать. Во-первых он предполагает интерактивный ввод. Во-вторых, даже если это обойти, если скрипт требует рутовых привелегий , то пользователь должен сам скрипт запустить от рута. И тебя не смущает, что sudo есть перед fdisk, но отсутствует перед mount и mkfs.ext4?
sync
- зачем? reboot
- точно нужен? fdisk и parted делают тебе готовые для использования разделы.
Далее, есть вещи, которые у опытных людей просто на автомате. Например, заключать все переменные, да и все строки в двойные кавычки. Использовать конструкцию вида $( ... )
вместо обратных кавычек. Почему ты используешь sh-вариант условий [ ... ]
вместо bash [[ ... ]]
? В grep в скриптах лучше обозначать начало и конец паттерна, то есть grep ' LIVEBOOT_HOME '
в твём случае, если я всё правильно понял в твоём варианте (я уже молчу о том, что как правило всё можно найти намного проще через /dev; если это метка, то dev/disk/by-label/
).