Bagaimana menjalankan skrip dari jalur lain, dan mengetahui jalur skrip?


8

Saya perlu menjalankan skrip yang mengakses file di jalur yang sama dengan lokasinya.

Sebagai contoh: Saya memiliki skrip /home/me/folder/script.sh, dan skrip ini akan mengakses file /home/me/folder/myfile. Karena file berada di jalur yang sama dengan skrip, saya hanya menggunakan nama myfile, bukan path lengkap.

Tetapi jika saya menjalankannya /tmp/, seperti:

/tmp$ /home/me/folder/script.sh

itu memberi saya:

myfile: No such file or directory

Jadi, bagaimana saya bisa mengatakan dalam skrip bahwa file berada di jalur yang sama dengan skrip itu sendiri?


Bisakah Anda menunjukkan apa penggunaan myfile di sini?
— Faheem Mitha

@Faheem Mitha: hanyalah skrip lain yang dipanggil oleh script.sh saya.
— Tom Brito

Beberapa alasan Anda tidak ingin menggunakan jalur lengkap, atau memindahkan keduanya ke PATH Anda?
— Faheem Mitha

1
@Faheem Mitha: Saya ingin dapat memindahkan folder ini dengan skrip ke tempat lain, bahkan mungkin komputer lain, tanpa perlu menulis ulang jalur myfile.
— Tom Brito

Jawaban:


8

Bagaimana dengan $(dirname "$0")/myfile?


9

Anda tidak dapat mengetahui dalam semua keadaan, tetapi seringkali (tidak selalu) ketika Anda menjalankan skrip demi path alih-alih membiarkan pencarian shell $PATH, path ke skrip akan berada $0. Anda kemudian dapat menggunakan dirname "$0"atau ${0%/*}untuk mendapatkan jalur.


4

Saya biasanya melakukan sesuatu seperti ini di bagian atas skrip saya:

SCRIPTDIR=$(dirname "$0")

Atau, untuk mendapatkan pathname lengkap ke direktori skrip (bukan pathname relatif):

SCRIPTDIR=$(cd $(dirname "$0") && pwd)

Kemudian hanya referensi di ${SCRIPTDIR}mana diperlukan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.