$ Cinsinden garip davranış (dirname `readlink -f $ 0`)


11

Aşağıdakileri normal kullanıcı olarak çalıştırdığımda her şey yolunda:

$(dirname `readlink -f $0`)

ancak root'a geçtikten sonra şu hata oluştu:

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

Herhangi bir fikir? Her ikisi de bash kabuğu çalıştıran yerel Fedora 16 ve Amazon EC2'yi denedim.

gösterim amacıyla düzenleyin.

burada daha fazla açıklayamadığım için özür dilerim. İşte senaryo:

normal kullanıcı hesabı kullanarak:

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

root kullanarak:

# 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

Yanıtlar:


16

Bu, bir kullanıcı oturum açma kabuğundaki hata ile aynı olmalıdır, çünkü bir oturum açma kabuğunda 0, geçerli işlemin adına genişleyen shell parametresi, -bashoturum açma kabuğunu gösteren eksi verir . Şimdi -bhatanın nereden geldiğini görüyorsunuz .

Bunun yerine dene

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

--("Eksi eksi" veya "kısa çizgi") neyi gösterir? Nevermind - Cevabı burada buldum: https://unix.stackexchange.com/q/11376
osullic

3

Çalışmakta olan kabuk betiğinin dizin adını gerçekten istiyorsanız:

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

Evet, biraz sakat ama güvenli.

Mevcut kabuğu istiyorsanız, @ MichaelMrozek'in kullanma önerisini deneyebilirsiniz $SHELL.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.