Да. Хорошо, может быть. По-разному. Для небольшого количества файлов и каталогов это не будет иметь большого значения.
Массовые операции с файлами в каталоге, смонтированном через NFS, выполняются медленно. Если у вас есть возможность зайти на сам сервер NFS и сделать их в актуальном каталоге, то это будет быстрее.
Давайте проверим это, удалив коллекцию портов OpenBSD, которую я извлек из CVS и смонтировал по NFS:
На NFS-сервере:
$ cd /export/shared/ports
$ du -hs.
2.6G .
$ find. | wc -l
179688
$ time rm -rf /export/shared/ports/*
0m20.87s real 0m00.12s user 0m04.62s system
На клиенте (после восстановления исходных файлов из резервной копии):
$ time rm -rf /usr/ports/*
6m49.73s real 0m01.55s user 1m08.96s system
Вы передаете переменные в команду, которую выполняете с помощью su -c
, точно так же, как вы передаете переменные в скриптsh -c
(илиbash -c
):
su other_user -c 'mkdir -p "/home/other_user/$1"' sh "$VER"
Два аргумента sh
и "$VER"
будут переданы оболочке, которая su
запускается в$0
(и используется в сообщениях об ошибках этой оболочки )и $1
соответственно.
Связанные:
Двойные кавычки должны достичь этого. Конечно, вам нужно будет потерять echo
.
steve@DESKTOP-E197DDI:~$ VER='10.2.1'
steve@DESKTOP-E197DDI:~$ su - steve -c "echo mkdir -p /home/other_user/$VER"
Password:
mkdir -p /home/other_user/10.2.1
steve@DESKTOP-E197DDI:~$