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

10

Quando executo o seguinte como um usuário normal, está tudo 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 bash shell.

edite para ilustração.

peço desculpas por não ter ilustrado 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
    
por d4v1dv00 31.01.2012 / 04:41

2 respostas

12

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

Tente

echo "$( dirname "$(readlink -f -- "$0")" )"
    
por 31.01.2012 / 06:35
3

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

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

Sim, é um pouco complicado, mas é seguro.

Se você quer o shell atual, você pode tentar a sugestão do @MicroMrozek de usar $SHELL .

    
por 31.01.2012 / 11:27

Tags