当我以普通用户身份运行以下命令时,一切都很好:
$(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 中,0
shell 参数扩展为当前进程的名称,给出-bash
,即表示登录 shell 的减号。您现在可以看到-b
错误来自何处。
尝试一下
echo "$( dirname "$(readlink -f -- "$0")" )"
答案2
如果您确实想要正在运行的 shell 脚本的目录名称:
script_dir="$(dirname -- "$(readlink -f -- "$0")")"
是的,它有点笨拙,但很安全。
如果您想要当前的 shell,您可以尝试 @MichaelMrozek 使用 的建议$SHELL
。