Meminta skrip bash

0

Memiliki skrip sederhana:

echo "file: $0"

ketika dipanggil seperti:

bash myscript.sh

atau

./myscript.sh

memberikan nama file skrip ( file: myscript.sh) seperti yang diharapkan tetapi ketika dipanggil:

sumber myscript.sh

atau

. ./myscript.sh

memberikan nama shell ( bash) alih-alih nama file skrip.

Kenapa seperti ini?

Mulligan
sumber

Jawaban:

2

Panggilan pertama akan memulai instance baru dari bash untuk menafsirkan skrip, artinya bash akan diatur $0ke jalurnya.

Panggilan kedua akan memperlakukan file sebagai file yang dapat dieksekusi dan menjalankannya, jadi $0akan mengarah ke sana.

Dua panggilan terakhir akan memuat file ke instance bash saat ini, jadi $0akan menunjuk ke sana.

NB: # 2 membutuhkan file untuk dapat dieksekusi, # 1, # 3 dan # 4 tidak.

Eugen Rieck
sumber
1
# 1 tidak memerlukan file untuk dapat dieksekusi, hanya # 2 yang perlu
Eric Renouf
Membaca dengan lebih cermat akan membantu - terima kasih atas tangkapannya!
Eugen Rieck