일반 사용자로 다음 명령을 실행하면 모든 것이 정상입니다.
$(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
답변1
이는 사용자의 로그인 쉘에서와 동일한 오류여야 합니다. 로그인 쉘에서 쉘 인수는 로그인 쉘을 나타내는 빼기 기호가 0
주어지면 현재 프로세스의 이름으로 확장되기 때문입니다. 이제 오류가 어디서 발생하는지 -bash
확인할 수 있습니다 .-b
시도 해봐
echo "$( dirname "$(readlink -f -- "$0")" )"
답변2
실행 중인 쉘 스크립트의 디렉토리 이름을 정말로 원하는 경우:
script_dir="$(dirname -- "$(readlink -f -- "$0")")"
네, 조금 투박하지만 안전해요.
현재 쉘을 원한다면 @MichaelMrozek이 사용한 제안을 시도해 볼 수 있습니다 $SHELL
.