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
이는 두 가지 사실을 알려줍니다. 1) 저는 이 명령의 BusyBox 버전을 실행하고 있습니다. 2) 해당 버전은 realpath
제가 사용해 온 명령 스위치를 지원하지 않습니다.
그런 다음 이 명령이 마지막으로 작동했을 때부터 지금까지 변경한 사항 중 하나가 BusyBox를 설치하는 것이라는 사실을 기억했습니다. BusyBox를 제거한 후 일반 버전을 얻었고 realpath
예상대로 작동합니다.
이 문제는 NixOS에서 발생하지만 문제가 NixOS에만 해당되는지는 알 수 없습니다.