Perilaku aneh dalam $ (dirname `readlink -f $ 0`)

11

Ketika saya menjalankan yang berikut ini sebagai pengguna normal, semuanya baik-baik saja:

$(dirname `readlink -f $0`)

tetapi setelah saya beralih ke root, kesalahan berikut terjadi:

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

Ada ide? Saya mencoba di Fedora 16 dan Amazon EC2 lokal, keduanya menjalankan bash shell.

sunting untuk ilustrasi.

mohon maaf karena saya tidak menggambarkan masalah ini lebih lanjut di sini. inilah skenarionya:

menggunakan akun pengguna normal:

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

menggunakan 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
sumber

Jawaban:

16

Ini harus menjadi kesalahan yang sama seperti di shell login pengguna, karena di shell login 0parameter shell, memperluas ke nama proses saat ini, memberikan -bash, minus menunjukkan shell login. Anda sekarang melihat dari mana -bkesalahan itu berasal.

Coba saja

echo "$( dirname "$(readlink -f -- "$0")" )"
enzotib
sumber
Apa yang --ditunjukkan oleh ("minus minus" atau "dasbor")? Nevermind - Saya menemukan jawabannya di sini: /unix//q/11376
osullic
3

Jika Anda benar-benar menginginkan nama direktori skrip shell yang sedang dijalankan:

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

Ya, ini agak tidak jelas, tapi aman.

Jika Anda menginginkan shell saat ini, Anda dapat mencoba saran @ MichaelMrozek untuk menggunakan $SHELL.

l0b0
sumber