Seltsames Verhalten in $ (dirname `readlink -f $ 0`)


11

Wenn ich als normaler Benutzer Folgendes ausführe, ist alles in Ordnung:

$(dirname `readlink -f $0`)

aber nachdem ich zu root gewechselt bin, ist der folgende Fehler aufgetreten:

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

Irgendwelche Ideen? Ich habe Fedora 16 und Amazon EC2 ausprobiert, beide mit Bash Shell.

zur Veranschaulichung bearbeiten.

Ich entschuldige mich, dass ich das Problem hier nicht weiter erläutert habe. Hier ist das Szenario:

mit normalem Benutzerkonto:

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

mit 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

Antworten:


16

Dies sollte der gleiche Fehler sein wie in einer Benutzeranmeldeshell, da in einer Anmeldeshell der 0Shell-Parameter, der auf den Namen des aktuellen Prozesses erweitert wird -bash, das Minus angibt, das die Anmeldeshell angibt. Sie sehen jetzt, woher der -bFehler kommt.

Versuchen Sie es stattdessen

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

Was bedeutet das --("Minus Minus" oder "Bindestrich")? Nevermind - Ich habe die Antwort hier gefunden: /unix//q/11376
osullic

3

Wenn Sie wirklich den Verzeichnisnamen des Shell-Skripts möchten, das ausgeführt wird:

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

Ja, es ist ein bisschen ungeschickt, aber es ist sicher.

Wenn Sie die aktuelle Shell möchten, können Sie @ MichaelMrozeks Vorschlag zur Verwendung ausprobieren $SHELL.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.