Оболочка может расширяться ~
до вашего домашнего каталога. $HOME
обычно имеет ту же самую сделку, но часто вы хотите обратиться к домашнему каталогу текущих пользователей из контекста, который может не поддерживать такое расширение.
У меня были конфигурационные файлы, где $HOME
работает, но ~
не работает , и наоборот.
Я думаю, что предохранитель может обеспечить что-то в этом роде, что-то вроде /var/myself
->$HOME
С этим я мог бы поместить значения в конфигурационные файлы, чтобы указать на такие вещи, как /var/myself/backdrops/pornography/wtf/yarly.jpg
Уже есть что-то подобное? Если нет, есть ли веские причины для того, чтобы этого не происходило?
Ответы:
Я понимаю ваше беспокойство, но ответ «нет», такого нет.
Обычный метод - задать ОС домашний путь пользователя или получить переменную $ HOME.
Все эти опции всегда нуждаются в некотором кодировании из приложения. Многие приложения, такие как bash, предлагают «псевдоним» ~ (open (2) не переводит это).
Конечно, для этого может быть реализован модуль vfs или fuse. Наверное, есть что сделать, я собираюсь спросить!
Но действительно ли это нужно? Вы можете использовать обходной путь, как:
Создайте сценарий для запуска программы, которая связывает $ HOME с относительным путем или известным местоположением.
Используйте pam_exec, чтобы связать каталог $ HOME с известным местоположением http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-pam_exec.html
источник
Одна хитрость (по крайней мере, в Linux) состоит в том, чтобы изменить каталог
$HOME
до запуска приложения и затем использовать его/proc/self/cwd/...
в файле конфигурации.источник
/proc/self
не/proc/PID
, так как вы не можете знать заранее , что PID будет.Большинство программ позволяют указывать путь к файлу конфигурации в командной строке. Таким образом, вы можете написать оболочку, которая берет стандартный файл конфигурации, фильтрует его, чтобы заменить вещи, подобные
$HOME
текущему пользователю, и затем передает измененный временный файл конфигурации в программу.источник
Вы можете получить pid запроса пользователя и спросить систему его / ее домашнего каталога. Так что можно.
Однако я не уверен, что нет программ SUID, которые бы воспринимали FS как статический.
Редактировать:
Приведенный выше код не является идеальным, но он должен работать для общих случаев.
источник
getpwuid
илиgetpwuid_r
.