realpath 告诉我我的目录不存在,但它确实存在

realpath 告诉我我的目录不存在,但它确实存在

我不明白该realpath命令的这种行为。

$ touch wombat
$ ls
wombat
$ cd /home/amy/test
$ ls
wombat
$ realpath --relative-to=. /home/amy/test/wombat
realpath: --relative-to=.: No such file or directory
/home/amy/test/wombat
$ realpath --relative-to=/home/amy/test /home/amy/test/wombat
realpath: --relative-to=/home/amy: No such file or directory
/home/amy/test/wombat

我预计这两个命令都会返回wombat。然而,他们似乎告诉我,我所在的目录或其父目录不存在。它甚至告诉我根目录不存在。

$ realpath --relative-to=/ /home/amy/test/wombat
realpath: --relative-to=: No such file or directory
/home/amy/test/wombat

我发现这一点是因为我最近编写的一些代码停止工作,所以也许 的行为realpath已经改变?

$ uname -a
Linux nixos 5.4.79 #1-NixOS SMP Sun Nov 22 09:14:12 UTC 2020 x86_64 GNU/Linux

编辑:好吧,这有点奇怪。可能是我最近升级的 NixOS 出了问题。

$ realpath --version
realpath: --version: No such file or directory

编辑:越来越好奇。

$ tar --version
tar (busybox) 1.31.1
$ python --version
Python 2.7.18
$ realpath -P
realpath: -P: No such file or directory
$ realpath --physical
realpath: --physical: No such file or directory

编辑:

$ type realpath
realpath is /run/current-system/sw/bin/realpath

对于 NixOS 来说,这看起来很正常。例如:

$ type tar
tar is /run/current-system/sw/bin/tar

编辑:我想我可能有一个想法。我最近将 busybox 添加到我的 NixOS 软件包中。根据下面的输出,我认为它提供了一个更简单的版本,realpath没有我习惯的花里胡哨的功能。

$ realpath --help
BusyBox v1.31.1 () multi-call binary.

Usage: realpath FILE...

Return the absolute pathnames of given FILE

答案1

感谢@thanasisp、@crtl-alt-delor 和@ilkkachu,我能够解决这个问题。当我尝试以下命令时,灵光乍现:

$ realpath --help
BusyBox v1.31.1 () multi-call binary.

Usage: realpath FILE...

Return the absolute pathnames of given FILE

这告诉我两件事:1)我正在运行此命令的 BusyBox 版本,2)该版本realpath不支持我一直在使用的任何命令开关。

然后我想起从上次该命令对我起作用到现在我所做的更改之一是安装 BusyBox。卸载 BusyBox 后,我得到了常规版本realpath,它按预期工作。

这是在 NixOS 上发生的,但我不知道该问题是否特定于 NixOS。

相关内容