일반 사용자로 다음을 실행하면 모든 것이 정상입니다.
$(dirname `readlink -f $0`)
그러나 루트로 전환 한 후 다음 오류가 발생했습니다.
readlink: invalid option -- 'b'
Try `readlink --help' for more information.
dirname: missing operand
Try `dirname --help' for more information.
어떤 아이디어? bash 셸을 실행하는 로컬 Fedora 16 및 Amazon EC2에서 시도했습니다.
그림 편집.
여기서 문제를 더 이상 설명하지 않았다고 사과드립니다. 시나리오는 다음과 같습니다.
일반 사용자 계정을 사용하는 경우 :
$ pwd
/home/myuser
$ export MY_DIR=$(dirname `readlink -f $0`)
$ echo MY_DIR
/home/myuser
루트를 사용하여 :
# pwd
/root
# export ROOT_DIR=$(dirname `readlink -f $0`)
readlink: invalid option -- 'b'
Try `readlink --help' for more information.
dirname: missing operand
Try `dirname --help' for more information.
# export ROOT_DIR=echo $(dirname `readlink -f -- $0`)
# echo $ROOT_DIR
/root
답변
로그인 쉘 0
에서 현재 프로세스의 이름으로 확장 되는 쉘 매개 변수 -bash
가 로그인 쉘을 나타내는 마이너스를 제공 하기 때문에 이는 사용자 로그인 쉘과 동일한 오류 여야합니다 . 이제 -b
오류의 출처를 알 수 있습니다.
대신 시도하십시오
echo "$( dirname "$(readlink -f -- "$0")" )"
답변
실행중인 쉘 스크립트의 디렉토리 이름을 정말로 원한다면 :
script_dir="$(dirname -- "$(readlink -f -- "$0")")"
예, 약간 멍청하지만 안전합니다.
현재 쉘을 원한다면 @MichaelMrozek의 제안을 사용해보십시오 $SHELL
.