O shell pode se expandir ~
para o diretório inicial. $HOME
geralmente tem o mesmo acordo, mas geralmente você deseja consultar o diretório inicial dos usuários atuais de um contexto que pode não suportar essa expansão.
Eu tive arquivos de configuração onde $HOME
funciona, mas ~
não funciona e vice-versa.
Eu acho que esse fusível poderia fornecer algo nesse sentido, algo como /var/myself
->$HOME
Com isso, eu poderia colocar valores nos arquivos de configuração para apontar para coisas como /var/myself/backdrops/pornography/wtf/yarly.jpg
Já existe algo assim? Caso contrário, existem boas razões para não haver algo assim?
Respostas:
Entendo sua preocupação, mas a resposta é "não", não existe.
O método usual é perguntar ao sistema operacional o caminho inicial do usuário ou obter a variável $ HOME.
Todas essas opções precisam sempre de alguma codificação do aplicativo. Muitos aplicativos, como o bash, oferecem o "alias" ~ (o open (2) não traduz isso).
Obviamente, um vfs ou um módulo de fusível pode ser implementado para fazer isso. Provavelmente há algo para fazer isso, eu vou perguntar isso!
Mas é realmente necessário? Você pode usar uma solução alternativa como:
Crie um script para iniciar o programa que vincula o $ HOME a um caminho relativo ou a um local conhecido.
Use pam_exec para vincular o diretório $ HOME a um local conhecido http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-pam_exec.html
fonte
Um truque (no Linux, pelo menos) seria alterar o diretório para
$HOME
antes de executar o aplicativo e depois usá-lo/proc/self/cwd/...
no arquivo de configuração.fonte
/proc/self
não/proc/PID
, desde que você não pode saber com antecedência o que o PID vai ser.A maioria dos programas permite especificar um caminho para o arquivo de configuração na linha de comando. Assim, você pode escrever um wrapper que pega um arquivo de configuração padrão, filtra-o para substituir coisas como
$HOME
o usuário atual e depois passa o arquivo de configuração temporário modificado para o programa.fonte
Você pode obter o pid de requestin user e perguntar ao sistema de seu diretório pessoal. Então é possível.
No entanto, não tenho certeza se não há programas SUID que assumiriam o FS como estático.
Editar:
O código acima não é ideal, mas deve funcionar para casos comuns.
fonte
getpwuid
ougetpwuid_r
.