Как добавить переменную в su - команда bash

Да. Хорошо, может быть. По-разному. Для небольшого количества файлов и каталогов это не будет иметь большого значения.

Массовые операции с файлами в каталоге, смонтированном через 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
0
01.10.2019, 23:52
2 ответа

Вы передаете переменные в команду, которую выполняете с помощью su -c, точно так же, как вы передаете переменные в скриптsh -c(илиbash -c):

su other_user -c 'mkdir -p "/home/other_user/$1"' sh "$VER"

Два аргумента shи "$VER"будут переданы оболочке, которая suзапускается в$0(и используется в сообщениях об ошибках этой оболочки )и $1соответственно.

Связанные:

3
28.01.2020, 02:22

Двойные кавычки должны достичь этого. Конечно, вам нужно будет потерять 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:~$
0
28.01.2020, 02:22

Теги

Похожие вопросы