我不明白该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。