Comportamiento extraño en $ (dirname `readlink -f $ 0`)

11

Cuando ejecuto lo siguiente como usuario normal, todo está bien:

$(dirname `readlink -f $0`)

pero después de cambiar a root, ocurrió el siguiente error:

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

¿Algunas ideas? Probé en Fedora 16 local y Amazon EC2, ambos ejecutando bash shell.

editar para ilustración.

disculpe que no ilustre más el problema aquí. Aquí está el escenario:

usando una cuenta de usuario 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
fuente

Respuestas:

16

Este debería ser el mismo error que en un shell de inicio de sesión de usuario, porque en un shell de inicio de sesión el 0parámetro de shell, que se expande al nombre del proceso actual, da -bash, el signo menos indica el shell de inicio de sesión. Ahora ve de dónde -bviene el error.

Intenta en su lugar

echo "$( dirname "$(readlink -f -- "$0")" )"
enzotib
fuente
¿Qué indica el --("menos menos" o "guión guión")? No
importa
3

Si realmente desea el nombre del directorio del script de shell que se está ejecutando:

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

Sí, es un poco turbio, pero es seguro.

Si desea el shell actual, puede probar la sugerencia de uso de @ MichaelMrozek $SHELL.

l0b0
fuente