Comportamento estranho em $ (dirname `readlink -f $ 0`)

11

Quando executo o seguinte como um usuário normal, tudo está bem:

$(dirname `readlink -f $0`)

mas depois que mudei para root, ocorreu o seguinte erro:

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

Alguma ideia? Eu tentei no Fedora 16 local e no Amazon EC2, ambos executando o shell bash.

editar para ilustração.

desculpe-me por não ilustrar mais a questão aqui. aqui está o cenário:

usando uma conta de usuário normal:

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

usando 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
d4v1dv00
fonte

Respostas:

16

Este deve ser o mesmo erro que em um shell de login do usuário, porque em um shell de login o 0parâmetro shell, expandindo para o nome do processo atual, fornece -basho sinal de menos indicando o shell de login. Agora você vê de onde -bvem o erro.

Experimente

echo "$( dirname "$(readlink -f -- "$0")" )"
enzotib
fonte
O que --indica ("menos menos" ou "traço")? Nevermind - Encontrei a resposta aqui: /unix//q/11376
osullic 28/01
3

Se você realmente deseja o nome do diretório do script de shell que está sendo executado:

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

Sim, é um pouco grosseiro, mas é seguro.

Se você quiser o shell atual, tente a sugestão de @ MichaelMrozek de usar $SHELL.

l0b0
fonte