bash 命令输出显示两条相同的行

bash 命令输出显示两条相同的行

在我的笔记本电脑上,安装了 Debian 11,为了显示 lightdm.conf,我首先使用了以下命令

~$ /usr/sbin/lightdm --show-config 
   [Seat:*]
-----------
Sources:
B  /usr/share/lightdm/lightdm.conf.d/01_debian.conf
B  /usr/share/lightdm/lightdm.conf.d/01_debian.conf   ---> same as above
C  /etc/lightdm/lightdm.conf.d/lightdm.conf
D  /etc/lightdm/lightdm.conf

然后我尝试

~$ sudo lightdm --show-config 
   [Seat:*]
----------
Sources:
A  /usr/share/lightdm/lightdm.conf.d/01_debian.conf
B  /etc/lightdm/lightdm.conf.d/lightdm.conf
C  /etc/lightdm/lightdm.conf

输出正常。我测试了另外两个安装了 Debian 11 的磁盘和第三个安装了 Debian 测试的磁盘,都没有显示这条重复的线/usr/share/lightdm/lightdm.conf.d/01_debian.conf.那么,我的笔记本电脑可能出了什么问题?

如果有帮助的话:

root@Xfce:~# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

~$ sudo printenv PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

~$ sudo which lightdm
/usr/sbin/lightdm

~$ strace -e /open /usr/sbin/lightdm --show-config
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
----------- /lib omitted
openat(AT_FDCWD, "/proc/filesystems", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY) = 6
openat(AT_FDCWD, "/usr/share/lightdm/lightdm.conf.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 6
openat(AT_FDCWD, "/usr/share/lightdm/lightdm.conf.d/01_debian.conf", O_RDONLY) = 6
openat(AT_FDCWD, "/usr/share/lightdm/lightdm.conf.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 6
openat(AT_FDCWD, "/usr/share/lightdm/lightdm.conf.d/01_debian.conf", O_RDONLY) = 6
openat(AT_FDCWD, "/usr/local/share/lightdm/lightdm.conf.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (Aucun fichier ou dossier de ce type)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/charset.alias", O_RDONLY) = -1 ENOENT (Aucun fichier ou dossier de ce type)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache", O_RDONLY) = 6
openat(AT_FDCWD, "/usr/share/xfce4/lightdm/lightdm.conf.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (Aucun fichier ou dossier de ce type)
openat(AT_FDCWD, "/etc/xdg/lightdm/lightdm.conf.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = -1 ENOENT (Aucun fichier ou dossier de ce type)
openat(AT_FDCWD, "/etc/lightdm/lightdm.conf.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 6
openat(AT_FDCWD, "/etc/lightdm/lightdm.conf.d/lightdm.conf", O_RDONLY) = 6
openat(AT_FDCWD, "/etc/lightdm/lightdm.conf", O_RDONLY) = 6

所有装有 (Debian 11 或测试版) 的机器(包括我的笔记本电脑)都给出:

~$ printenv XDG_DATA_DIRS
/usr/share/xfce4:/usr/local/share/:/usr/share/:/usr/share

和 XDG_CONFIG_DIRS 是相同的。感谢您的帮助,我会继续关注。

  • 但是,如果我从笔记本电脑上的 XDG_DATA_DIRS 中删除一个 /usr/share,那么我得到的正确输出只有一行 B 。

答案1

感谢 strace 输出,它没有显示任何用户配置是导致这种双重解析的原因,因为/usr/share/lightdm/lightdm.conf.d在尝试任何其他配置文件之前已经被解析了两次。

通过检查lightdm 源代码看起来要解析的目录是通过调用g_get_system_data_dirs()和来选择的g_get_system_config_dirs()。这些是 glib 中的方法,根据文档,例如这里,从环境变量中获取要解析的目录列表XDG_DATA_DIRSXDG_CONFIG_DIRS

我猜你/usr/share由于某种原因在这些变量中出现了两次(可能是某些 .bashrc 文件中有重复?),所以它被解析了两次(其中lightdm的部分/usr/share/lightdm是从 lightdm 本身添加的)。

当您使用 sudo 运行它时,您的环境变量不会被使用,并且我猜XDG_DATA_DIRS会得到一些只XDG_CONFIG_DIRS包含一次的默认值,正如预期的那样。/usr/share

更新 为了清楚起见,根据您最近的编辑,XDG_DATA_DIRS和都XDG_CONFIG_DIRS经过检查,所以由于您/usr/share在每个中都有一次,这就是您得到重复的原因。

相关内容