$의 이상한 동작 (dirname`readlink -f $ 0`) more information. 어떤 아이디어? bash 셸을 실행하는 로컬

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

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


답변