GNU/Linux >> Belajar Linux >  >> Linux

Perbedaan Antara Sumber ('.' Atau 'sumber') Dan Mengeksekusi File Di Bash?

Apa perbedaan antara menjalankan skrip seperti ini:

./test.sh

dan jalankan skrip seperti ini:

. test.sh ?

Saya mencoba skrip dua baris sederhana untuk melihat apakah ada perbedaan:

#!/bin/bash
ls

Tapi keduanya . test.sh dan ./test.sh mengembalikan informasi yang sama.

Jawaban yang Diterima:

./test.sh menjalankan test.sh sebagai program tersendiri. Ini mungkin skrip bash, jika file test.sh dimulai dengan #!/bin/bash . Tapi itu bisa menjadi sesuatu yang lain sama sekali.

. ./test.sh mengeksekusi kode file test.sh di dalam instance bash yang sedang berjalan. Ini berfungsi seolah-olah file konten test.sh telah dimasukkan secara tekstual alih-alih . ./test.sh garis. (Hampir:ada beberapa detail yang berbeda, seperti nilai $BASH_LINENO , dan perilaku return bawaan.)

source ./test.sh identik dengan . ./test.sh di bash (di shell lain, source mungkin sedikit berbeda atau tidak ada sama sekali; . untuk dimasukkan dalam standar POSIX).

Perbedaan yang paling umum terlihat antara menjalankan skrip terpisah dengan ./test.sh dan menyertakan skrip dengan . bawaan adalah jika test.sh skrip menetapkan beberapa variabel lingkungan, dengan proses terpisah, hanya lingkungan proses anak yang diatur, sedangkan dengan penyertaan skrip, lingkungan dari proses shell tunggal diatur. Jika Anda menambahkan baris foo=bar di test.sh dan echo $foo di akhir skrip panggilan, Anda akan melihat perbedaannya:

$ cat test.sh
#!/bin/sh
foo=bar
$ ./test.sh
$ echo $foo

$ . ./test.sh
$ echo $foo
bar

Linux
  1. Apa perbedaan antara &> dan >&di bash?

  2. Perbedaan antara /bin dan /usr/bin

  3. Apa perbedaan antara /tmp dan /run?

  1. Linux:Perbedaan Antara /dev/console , /dev/tty Dan /dev/tty0?

  2. Apa Perbedaan Antara /sbin/nologin Dan /bin/false?

  3. Perbedaan Antara "du -sh *" Dan "du -sh ./*"?

  1. Perbedaan Antara /opt Dan /usr/local?

  2. Perbedaan Antara .exrc Dan .vimrc?

  3. Perbedaan Antara '$ . Foo' Dan '$ ./foo'??