shell 可以扩展~
到您的主目录。 $HOME
通常有相同的处理,但通常您希望从可能不支持此类扩展的上下文中引用当前用户的主目录。
我的配置文件可以$HOME
工作,但~
不能,反之亦然。
我猜想保险丝可以提供类似的东西,比如/var/myself
->$HOME
这样我就可以在配置文件中放置值来指向类似的东西/var/myself/backdrops/pornography/wtf/yarly.jpg
已经有这样的事情了吗?如果没有,是否有充分的理由不发生这样的事情?
答案1
我理解你的担忧,但答案是“不”,不存在这样的事情。
通常的方法是向操作系统询问用户的主路径,或者获取 $HOME 变量。
所有这些选项始终需要应用程序进行一些编码。许多应用程序,如 bash,提供“别名”~(open(2) 不会翻译它)。
当然,可以使用 vfs 或熔断器模块来实现此目的。可能有什么事情要做,我要问一下!
但真的有必要吗?您可以使用如下解决方法:
创建一个脚本来启动将 $HOME 链接到相对路径或已知位置的程序。
使用 pam_exec 将 $HOME 目录链接到已知位置http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-pam_exec.html
答案2
一个技巧(至少在 Linux 上)是$HOME
在运行应用程序之前将目录更改为,然后/proc/self/cwd/...
在配置文件中使用。
答案3
大多数程序允许您在命令行上指定配置文件的路径。因此,您可以编写一个包装器,它采用标准配置文件,对其进行过滤以替换$HOME
当前用户之类的内容,然后将修改后的临时配置文件传递给程序。
答案4
您可以获取请求用户的 pid,并向系统询问他/她的主目录。所以这是可能的。
但是我不确定是否没有 SUID 程序将 FS 假定为静态。
编辑:
struct fuse_context *ctx = fuse_get_context ();
struct passwd pwd, *ppwd;
char buffer[1024];
int status = getpwuid_r (ctx->ui, &pwd, buffer, sizeof(buffer), &ppwd);
if (status == 0) {
if (ppwd == NULL) {
// No record found
} else {
// Handle record
}
} else {
// Handle error
}
上面的代码并不理想,但应该适用于常见情况。