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

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")" )"

¿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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.