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
編集する:私の考えには私にアイデアがあると思います。私は最近NixOSパッケージにbusyboxを追加しました。以下の出力に基づいて、私はおなじみのアドオンなしで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
これは2つの事実を伝えます。 1) 私はこのコマンドの BusyBox バージョンを実行しています。 2)そのバージョンはrealpath
私が使ってきたコマンドスイッチをサポートしていません。
その後、このコマンドが最後に動作したときからこれまでに変更したことの1つがBusyBoxをインストールすることでした。 BusyBoxをアンインストールした後、通常のバージョンが得られ、期待realpath
どおりに動作します。
この問題はNixOSで発生しますが、問題がNixOSに固有のものかどうかはわかりません。