Вы должны добавить пользователя в группу disk
с правами root:
usermod -a -G disk USER
NB : Добавление ПОЛЬЗОВАТЕЛЯ в ] disk
группа эквивалентна предоставлению корневого доступа.
Как пользователь запускает:
fatsort /dev/sdh
Вы можете использовать строковые операции оболочки, чтобы получить последнюю часть каталога без вызова внешней утилиты:
dirc="/a/b/"
dirc=${dirc%/} # remove trailing / if it is there
echo "${dirc##*/}" # remove everything up to the last /
Которая выводит b
. Обратите внимание, что это не будет работать, если dirc
— это просто /
, поэтому basename
может быть лучше.
Или получить одно поле по номеру через массив оболочки.
IFS=/ read -a dira <<< "$dirc" # split to an array
echo "${dira[2]}" # echo one field, first is 0
Кстати, обратные кавычки в вашем echo | awk
- это опечатка? С ними оболочка будет принимать вывод awk как команду для запуска.
Чтобы напечатать последнюю часть пути, используйтеbasename
:
$ dirc='/a/b/'
$ basename "$dirc"
b
Чтобы получить i-е/
-поле с разделителями, используя awk
, установите переменную awk
, например var
, на значение $i
, затем используйте $var
в awk
для доступа к i-е поле:
$ i=3
$ echo "$dirc" | awk -v var="$i" -F '/' '{ print $var }'
b
Разница между var
и $var
в awk
заключается в том, что var
является числовым значением, (в данном случае ), а $var
— значением поля, соответствующего этому числовому значению..
Как заметил ilkkachu, обратные кавычки вокруг последней строки кода не имеют смысла. Это приведет к тому, что результат команды (строкаb
)будет интерпретирована как команда, которая будет выполнена.
i
в сценарии AWK это переменная AWK, а не переменная оболочки; вам нужно установить переменную AWK:
#!/bin/bash
dirc="/a/b/"
echo "${dirc}" | awk -F / -v i=3 '{print $i}'
Вы можете указать значение i
любым способом, понятным оболочке:
i=3
echo "${dirc}" | awk -F / -v "i=${i}" '{print $i}'
Вы могли бы также заставить оболочку оценивать переменную в сценарии AWK, но это просто поиск проблем:
i=3
echo "${dirc}" | awk -F / "{print \$${i}}"