데비안 스퀴즈 amd64가 있습니다. 내 현재 쉘은 bash입니다. 터미널에 다음을 작성하면 작동합니다.
$ uname -a
Linux core 2.6.32-5-amd64 #1 SMP Fri May 10 08:43:19 UTC 2013 x86_64 GNU/Linux
$ echo $SHELL
/bin/bash
$ echo $(realpath test.sh)
/home/ffortier/test.sh
내 test.sh 파일은 다음과 같습니다.
#!/bin/bash
echo $(realpath "$1")
다음 명령을 실행하려고 하면 오류가 발생합니다.
$ ./test.sh test.sh
./test.sh: line 2: realpath: command not found
bash 파일에서 realpath 명령을 사용하는 방법은 무엇입니까?
추가 정보
$ type -a realpath
realpath is a function
realpath ()
{
f=$@;
if [ -d "$f" ]; then
base="";
dir="$f";
else
base="/$(basename "$f")";
dir=$(dirname "$f");
fi;
dir=$(cd "$dir" && /bin/pwd);
echo "$dir$base"
}
답변1
다음과 같은 프로그램이 두 개 이상 있습니다 realpath
.
- 당시 GNU coreutils에 포함되지 않았던 오래된 프로그램
readlink -f
입니다. 이제 더 이상 사용되지 않으므로readlink -f
많은 배포판에서 이 프로그램을 지원하지 않습니다. - 이
realpath
프로그램은 GNU coreutils 8.15에서 도입되었습니다. 이 글을 쓰는 시점에는 데비안에서 압축하기에는 너무 오래되었습니다.데비안 불안정 버전도 이를 제공하지 않습니다.. 이 프로그램은 매우 가깝습니다readlink -f
.
어떤 이유로 부분적으로 에뮬레이트된 쉘 함수가 있습니다 realpath
. 이 에뮬레이션은 부분적입니다. 심볼릭 링크에서 호출하면 심볼릭 링크를 따르지 않습니다.
이는 에서 또는 를 통해 로드될 수 있는 셸 함수이므로 .bashrc
대화형 셸에서 실행되는 코드에만 적용됩니다. Linux를 실행한다고 가정하고 다른 프로그램에서 사용할 수 있도록 하려면 시뮬레이션된 스크립트를 만듭니다 realpath
.
#!/bin/sh
readlink -f -- "$@"
realpath
(이것은 거의 사용되지 않는 명령줄 옵션을 에뮬레이트하지 않습니다 .)
답변2
스크립트 파일의 범위가 다르고 다음에 정의된 로컬 함수 및 별칭에 액세스할 수 없기 때문에 이는 셸에서만 작동합니다.RC문서. 그리고 realpath
해당 명령은 실제로 시스템에 존재하지 않습니다.
realpath
따라서 패키지에서 설치하거나 자신만의 기능을 정의하십시오(스크립트의 일부로 일부를 확인하십시오).예) 또는 소스RC스크립트에서 이를 정의하는 파일입니다(예 . ~/.bashrc
: ).
realpath
존재하지 않는 경우 다음 단계에 따라 설치하십시오.
- 우분투:
sudo apt-get install coreutils
- 운영 체제:
brew install coreutils
우분투와 더반
realpath
데비안이나 우분투에서는 기본으로 설치 되어야 할 것 같습니다 . 최근 Debian 8(Jessie)을 확인해 보니 coreutils
기본적으로 설치되어 있는 것 같습니다 .
새 VM 이미지로 테스트합니다.
$ vagrant init debian/jessie64 && vagrant up --provider virtualbox && vagrant ssh
$ vagrant init ubuntu/vivid64 && vagrant up --provider virtualbox && vagrant ssh
그런 다음 가상 머신에서 다음을 수행합니다.
$ type -a realpath
realpath is /usr/bin/realpath
이 외에도 패키지에서 제공하는 (또는) realpath
을 사용할 수 있습니다 .readlink -f file
greadlink
coreutils
답변3
realpath는 실제 명령입니까 아니면 스크립트입니까? 어디서 나오는지 확인해 보겠습니다.
$ type -a realpath
저는 이 도구에 익숙하지 않기 때문에 정규 배포판의 일부가 아닐 수도 있고 Bash에는 존재하지 않지만 $PATH
로그인 환경의 $PATH
.
그럼에도 불구하고 위의 type
명령 소스는 다음과 같이 스크립트에서 명령을 호출하는 방법을 변경할 수 있는 지점에서 표시됩니다.
echo $(/path/to/realpath test.sh)
$PATH
또는 이 비표준 위치도 포함하도록 스크립트를 수정하세요 .
쉘의 기능
쉘 스크립트를 호출할 때 대부분의 환경은 호출되지 않습니다. 생각해 보면 일반적으로 스크립트가 사용자 환경에 있을 수 있는 추가 수하물을 모두 포함하는 것을 원하지 않기 때문에 이는 의미가 있습니다.
이 기능을 제공하는 소스 파일을 확인하고 가져오거나 Bash에 로그인 환경을 병합하도록 지시할 수 있습니다.
#!/bin/bash -l
echo $(realpath "$1")
답변4
$ sudo apt-get install realpath