$ 0 변수는 스크립트의 경로 정보를 포함합니다.
- 경로 정보를 절대 경로로 변경하려면 어떻게해야합니까? ~,., .. 또는 이와 유사한 것을 처리하는 방법을 의미합니까?
- 경로 정보를 디렉토리와 파일 이름으로 어떻게 분할 할 수 있습니까?
이것을 위해 python / perl을 사용할 수 있지만 가능한 경우 bash를 사용하고 싶습니다.
답변
당신은 같은 것들을 처리 할 필요가 없습니다 ~
. 쉘이 당신을 위해 그것을합니다. 그렇기 때문에 ~/filename
모든 스크립트 또는 프로그램에 전달할 수 있고 작동합니다. 모든 프로그램이 ~
자체적으로 처리하지 않고 쉘은 인수를 변환하여 /home/username/filename
대신 프로그램에 전달합니다.
$ echo ~/filename
/home/mrozekma/filename
당신은 표준 파일 이름 (같은 것들을 포함하지 않는 한이 필요한 경우 ..
, 사용) realpath
(감사 닐 )
$ realpath ~/../filename
/home/filename
분할 디렉토리 이름과 파일 이름 사용에 경로로 dirname
와 basename
:
$ dirname /foo/bar/baz
/foo/bar
$ basename /foo/bar/baz
baz
답변
Michael이 언급 한 것처럼 dirname과 basename을 사용하는 것이 원하는 것을 얻는 가장 안전한 방법이어야합니다.
어쨌든 “bash 전용 도구”를 사용하여이 작업을 수행하려면 매개 변수 대체를 사용할 수 있습니다.
echo `basename $PWD` # Basename of current working directory.
echo "${PWD##*/}" # Basename of current working directory.
echo
echo `basename $0` # Name of script.
echo $0 # Name of script.
echo "${0##*/}" # Name of script.
echo
filename=test.data
echo "${filename##*.}" # data
# Extension of filename.
이 예제는 Advanced Bash Scripting Guide 에서 직접 가져온 것입니다.
설명은 매우 간단합니다.
$ {var # Pattern} $ var의 프론트 엔드와 일치하는 $ Pattern의 가장 짧은 부분을 $ var에서 제거하십시오. $ {var ## Pattern} $ var의 프론트 엔드와 일치하는 $ Pattern의 가장 긴 부분을 $ var에서 제거하십시오.
정규식 #
이나 ##
욕심 / 비 욕심 수정 자 와 같은 패턴을보십시오 .
경로 부분의 좀 더 복잡한 추출을 수행해야하는 경우 유용 할 수 있습니다.
답변
realpath
실제 경로를 알려주는 명령입니다 (.. 및 심볼릭 링크 제거 등).
FreeBSD의 표준입니다. 이 토론에 따르면 Linux에서도 사용할 수 있습니다.
http://www.unix.com/shell-programming-scripting/89294-geting-real-path.html
이 토론은 또한 bash 솔루션을 제공합니다.
$ bash -c "cd /foo/../bar/ ; pwd"