$(目录名`readlink -f $ 0`)中的异常行为


11

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

$(dirname `readlink -f $0`)

但是切换到root之后,发生了以下错误:

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

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

编辑插图。

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

使用普通用户帐户:

$ 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

Answers:


16

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

试试看

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

什么是--(“减减”或“破折号破折号”)说明什么?没关系-我在这里找到了答案:https
//unix.stackexchange.com/q/11376

3

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.