$(dirname `readlink -f $0`) 中的奇怪行为

$(dirname `readlink -f $0`) 中的奇怪行为

当我以普通用户身份运行以下命令时,一切都很好:

$(dirname `readlink -f $0`)

但是切换到root后,出现了如下错误:

readlink: invalid option -- 'b'
Try `readlink --help' for more information.
dirname: missing operand
Try `dirname --help' for more information.

有任何想法吗?我尝试了本地 Fedora 16 和 Amazon EC2,两者都运行 bash shell。

抱歉,我没有在这里进一步说明这个问题。这是场景:

使用普通用户帐户:

$ pwd 
/home/myuser 
$ export MY_DIR=$(dirname `readlink -f $0`) 
$ echo MY_DIR 
/home/myuser

使用 root 用户帐户:

# 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

这应该与用户登录 shell 中的错误相同,因为在登录 shell 中,0shell 参数扩展为当前进程的名称,给出-bash,即表示登录 shell 的减号。您现在可以看到-b错误来自何处。

尝试一下

echo "$( dirname "$(readlink -f -- "$0")" )"

答案2

如果您确实想要正在运行的 shell 脚本的目录名称:

script_dir="$(dirname -- "$(readlink -f -- "$0")")"

是的,它有点笨拙,但很安全。

如果您想要当前的 shell,您可以尝试 @MichaelMrozek 使用 的建议$SHELL

相关内容