df /
. К сожалению, он производит много вывода (, под которым я подразумеваю строку заголовка и множество полей ), так что вам все равно нужно будет сделать некоторую фильтрацию чтобы получить только имя устройства. Вы правы; ваша команда слишком длинная и несколько неуклюжая. awk
— очень мощная программа; тебе редко нужно объединить его с grep
и/или sed
, и иметь несколько команд awk
в одном конвейере почти никогда не требуется. Ваш пайплайн можно заменить на
sfdisk -l | awk '/Linux/ && $2 == "*" { gsub("[0-9]", "", $1); split($1, a, "/"); print a[3]; }'Хорошо, это всего на дюжину символов короче, но это одна команда вместо пяти.
П.С. sed 's/[0-9]*//g'
— немного опасная команда. Из-за g
, на самом деле не имеет смысла иметь *
также. Чтобы понять, что я имею в виду, попробуйте sed 's/[0-9]*/X/g'
с различными входными данными, и сравните с s/[0-9]/X/g
и s/[0-9]\+/X/g
.
OS_DISK=` command `
можно изменить к OS_DISK=$(command)
, вторая форма (со скобками )предпочтительнее. Команды fdisk
и sfdisk
включены в пакет util-linux
. В том же пакете есть также команда findmnt
, которую вы можете использовать, как показано ниже:
findmnt / -no SOURCE
/dev/sda6