Strano comportamento in $ (dirname `readlink -f $ 0`)


11

Quando eseguo quanto segue come utente normale, va tutto bene:

$(dirname `readlink -f $0`)

ma dopo che sono passato a root, si è verificato il seguente errore:

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

Qualche idea? Ho provato su Fedora 16 locale e Amazon EC2, entrambi con bash shell.

modifica per l'illustrazione.

mi scuso per non aver ulteriormente illustrato il problema qui. ecco lo scenario:

utilizzando il normale account utente:

$ 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

Risposte:


16

Questo dovrebbe essere lo stesso errore di una shell di login utente, perché in una shell di login il 0parametro shell, espandendosi al nome del processo corrente, fornisce -bashil segno meno che indica la shell di login. Ora vedi da dove viene l' -berrore.

Prova invece

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

Cosa indica --("meno meno" o "trattino")? Nevermind - Ho trovato la risposta qui: /unix//q/11376
osullic

3

Se vuoi davvero il nome della directory dello script della shell che viene eseguito:

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

Sì, è un po 'maldestro, ma è sicuro.

Se vuoi la shell corrente, puoi provare il suggerimento di @ MichaelMrozek di usare $SHELL.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.