Ubuntu 不会将 /home/testuser 翻译为 ~

Ubuntu 不会将 /home/testuser 翻译为 ~

在 Ubuntu 22.04.3 LTS 中,如果我使用 LDAP 用户的凭据登录testuser,在几个不同的程序中,目录的路径$HOME不会被替换~(因为本地用户会发生这种情况)。

举几个例子:

  1. 在 中bash, 的值为PS1默认值:

    \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
    

但它显示为

testuser@myhost:/home/testuser$

代替

testuser@myhost:~$
  1. 在 中neomutt,在列出邮件目录的左栏中,显示其完整路径

    /home/testuser/Mail/mailbox1
    

代替

   ~/Mail/mailbox1

然而,在bash,

$ echo $HOME
/home/testuser

所以这个env变量HOME在某种程度上是被认可的。

这可能是什么问题?


更新

我用来sssd管理 LDAP 用户的身份验证:

$ grep passwd /etc/nsswitch.conf 
passwd:         files systemd sss

LDAP 用户和本地用户的条目看起来非常相似:

$ getent passwd testuser
testuser:*:<uid>:<gid>:Test User:/home/testuser/:/usr/bin/bash

$ getent passwd localuser
localuser:x:<uid>:<gid>:,,,:/home/localuser:/bin/bash

$ echo $HOME
/home/testuser/

与 中指定的主目录匹配getent passwd testuser

答案1

问题是/LDAP 定义中的尾随字符$HOME

getent passwd testuser
testuser:*:<uid>:<gid>:Test User:/home/testuser/:/usr/bin/bash

您可以使用本地用户帐户来演示这一点:

OHOME="$HOME"
cd "$HOME"

HOME="$HOME/"
cd "$HOME"

HOME="$OHOME"
[ -n "$OHOME" ] && { HOME="$OHOME"; unset OHOME; }

一旦将交换分配给主目录的绝对路径,您就会看到这HOME="$HOME/"一点~

答案2

用户主目录的 LDAP 记录中的目录路径末尾似乎有一个额外的斜杠,即

/home/testuser/

代替

/home/testuser

是的,通常在目录名末尾添加斜杠以表明它实际上是一个目录,但这只是用户的额外装饰,而不是路径名的标准形式。

例如,该pwd命令返回当前工作目录而不附加斜杠,主要是因为这就是 system/libc 调用返回的方式getcwd(),符合 POSIX 合规性。存储在用户记录中的主目录路径名(无论是在/etc/passwdLDAP 中还是在 LDAP 中)应采用相同的格式。~这允许通过简单的字符串比较和替换操作来替换主目录路径。

相关内容