Вопрос или проблема
Я использую следующие команды в командной строке:
sudo fdisk /dev/mmcblk1
p
d
w
sudo fdisk /dev/mmcblk1
n
(используя все параметры по умолчанию)
w
Пожалуйста, есть ли возможность автоматизировать эту задачу? Или как использовать однострочную команду для этого (даже для каждой команды fdisk в виде однострочника, то есть два однострочника в общей сложности)? Или, может быть, с помощью Python?
Вы можете использовать однострочную команду (bash):
(echo p; echo d; ... ; echo w) | fdisk /dev/mmcblk1
Для установки ответа по умолчанию используйте echo ""
, чтобы ответить “Да”, используйте echo "Y"
Просто создайте файл (например, fdisk_cmds
), который будет содержать команды, как, например:
p
i
# Это пустая строка для выбора ответа по умолчанию
q
sudo fdisk /dev/mmcblk1 < fdisk_cmds
Рассмотрите SFDisk для этой задачи.
https://stackoverflow.com/questions/12150116/how-to-script-sfdisk-or-parted-for-multiple-partitions
Заранее спасибо
Карлос Ромель
Во-первых, используйте более подходящий инструмент. Но если вам нужно автоматизировать такого рода ввод, используйте here-doc:
sudo fdisk /dev/mmcblk1 <<\КонецОтветов
p
d
w
q
КонецОтветов
(Вы можете выбрать любой символ, который вам нравится вместо КонецОтветов
; в документации часто используется EOF
, но это всего лишь соглашение. \
после <<
просто делает первую букву КонецОтветов
“цитируемой”, как это видит оболочка, что означает, что в теле here-doc не происходит $
расширений; вы можете добиться того же эффекта, используя <<'КонецОтветов'
или <<"КонецОтветов"
или даже <<КонецОтв\nетов
.)
Ответ или решение
Для автоматизации создания разделов с помощью fdisk
, вы можете использовать несколько подходов, включая однострочные команды и скрипты. Вот некоторые из них:
Подход с использованием here-doc
Один из наиболее простых способов автоматизации — это использование here-doc
. Вы можете выполнять команду fdisk
, передавая ей набор команд через стандартный ввод. Пример это выглядит следующим образом:
sudo fdisk /dev/mmcblk1 <<EOF
p
d
w
EOF
В данном примере EOF
— это маркер, который указывает на конец ввода команд. Вы можете использовать любой другой маркер, который вам удобен.
Создание файла команд
Другой способ — создать файл, содержащий все необходимые команды fdisk
. Например, создайте файл fdisk_cmds
с содержимым:
p
d
w
И затем выполните команду fdisk
, передав этот файл:
sudo fdisk /dev/mmcblk1 < fdisk_cmds
Использование sfdisk
Стоит отметить, что для более сложных операций с разделами многие эксперты рекомендуют использовать утилиту sfdisk
, так как она более предсказуема и удобна для автоматизации. Пример использования sfdisk
:
sudo sfdisk /dev/mmcblk1 < имя_файла
Где имя_файла
может содержать разметку, например:
dev/mmcblk1 :
1M,,L,* # Первичный раздел, размером 1М, тип - FAT16
Использование Python
Если вы хотите использовать Python для автоматизации, вы можете воспользоваться библиотекой subprocess
, чтобы выполнять команды. Например:
import subprocess
commands = "p\nd\nw\n"
process = subprocess.Popen(['sudo', 'fdisk', '/dev/mmcblk1'], stdin=subprocess.PIPE)
process.communicate(commands.encode())
В данном коде мы создаем процесс, который вызывает fdisk
и передаем ему команды.
Заключение
Выбор метода автоматизации зависит от ваших требований к проекту. Лучше использовать sfdisk
для более сложных задач, так как эта утилита более надежна для автоматизации. Но если вам нужно просто выполнить несколько команд fdisk
, рассмотренные выше методы работают вполне эффективно.