Я пытаюсь создать сценарий makefile и пытался автоматически создать несколько папок в определенном каталоге. Однако у меня возникли проблемы при попытке реализовать это: во-первых, я попытался сделать это обычным путем:

mkdir ~/Documents/testfolder

Однако это дало мне эту ошибку: mkdir: cannot create directory '/root/Documents/testfolder': No such file or directory

Затем я попытался использовать переменную $USER с помощью этой команды:

mkdir /home/$USER/Documents/testfolder

Но тогда он будет зарегистрирован как /home/root/Documents/... и вызовет ошибку. Скрипты Makefile в большинстве случаев должны запускаться как sudo, поэтому для меня это довольно проблематично. Любая помощь?

-1
Existentialist 17 Авг 2021 в 22:23
1
Добро пожаловать, похоже, вы запускаете команды, зарегистрированные как root. Делать это не рекомендуется. Используйте sudo для выполнения задач суперпользователя, войдя в систему как ваш пользователь.
 – 
schrodigerscatcuriosity
17 Авг 2021 в 22:31
3
«Сценарии Makefile большую часть времени должны запускаться как sudo» — они не должны... И если вы пишете свой собственный Makefile и хотите, чтобы он создавал каталоги в вашем домашнем каталоге, запускайте его как обычный пользователь. , а не root или с sudo.
 – 
Stephen Kitt
17 Авг 2021 в 22:36
Makefiles обычно не требуют root. «Сделать установку» — единственное приемлемое исключение.
 – 
mmmm
17 Авг 2021 в 22:42
1
/root/Documents должен существовать или используйте 'mkdir -p'
 – 
Bib
17 Авг 2021 в 23:00
1
Если вы должны запустить make-файл с помощью sudo, то, возможно, вы ищете $SUDO_USER?
 – 
steeldriver
17 Авг 2021 в 23:10

1 ответ

Если в вашей среде оболочки есть $USER, все должно работать, поскольку make импортирует все переменные среды. Но вам нужно позаботиться о том, действительно ли $USER отражает текущий идентификатор пользователя.

Однако внутри Makefiles есть другие правила, отличные от внутренних сценариев оболочки. Вы можете проверить это с помощью следующего make-файла:

all:
        echo USER: $(USER)

И это должно работать. Обратите внимание, что make требует $(...) для создания имен макросов, которые длиннее одного символа. Скобки необходимы, потому что в противном случае $U будет расширено.

Теперь к вашей проблеме разрешения. Похоже, вы использовали такую ​​программу, как su или sudo, которая изменяет идентификатор пользователя без изменения переменной оболочки $USER.

Попробуйте напрямую войти в систему как пользователь, которого вы хотите запустить make.

0
schily 21 Авг 2021 в 15:42