$(dirname `readlink -f $0`)의 이상한 동작

$(dirname `readlink -f $0`)의 이상한 동작

일반 사용자로 다음 명령을 실행하면 모든 것이 정상입니다.

$(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.

관련 정보