Belajar Perbezaan Antara Penyumberan dan Forking di Bash

Belajar Perbezaan Antara Penyumberan dan Forking di Bash

Tumpuan utama artikel ini adalah dengan jelas memahami apa yang berlaku apabila anda menjalankan skrip vs sumber skrip di bash. Pertama, kami akan memahami dengan jelas bagaimana program ini diserahkan apabila anda memanggil skrip dengan cara yang berbeza.

CATATAN: Membuat skrip dengan lanjutan tidak penting. Skrip akan berjalan dengan baik walaupun tanpa sambungan.

Pada asasnya, setiap skrip bermula dengan garis yang disebut a Shebang (#!). The Hash simbol dalam bash akan ditafsirkan sebagai komen tetapi Shebang mempunyai makna yang istimewa. Ia memberitahu Bash untuk mengemukakan program dalam apa jua jurubahasa yang anda sebutkan Shebang.

Berikut adalah program sampel dan saya menentukan bash sebagai penterjemah saya.

$ kucing >> hello_world.sh #!/usr/bin/env bash echo "hello world" $ chmod +x hello_world.sh 

Sekarang untuk menjalankan skrip, anda boleh melakukannya dalam dua cara.

  • Gunakan jalan relatif untuk memanggil skrip. Pindah ke direktori di mana skrip hadir dan dijalankan ./Hai dunia.sh.
  • Gunakan jalan mutlak untuk memanggil skrip. Dari mana sahaja di sistem fail taipkan laluan penuh ke skrip.
$ ./Hai dunia.sh $ pwd $/home/karthick/hello_world 
Jalankan skrip shell

Sekarang mari kita lihat apa yang berlaku apabila anda cuba menghantar program anda tanpa Shebang. Tanpa ketiadaan Shebang, Program ini akan dikemukakan kepada apa sahaja shell semasa yang anda jalankan, dalam kes saya, itu adalah Bash (/bin/bash).

Biarkan saya menunjukkan contoh. Saya membuat skrip python tanpa Shebang Dan ketika saya memanggil program, bash tidak tahu bahawa ia harus menyerahkan program ini kepada penterjemah python sebaliknya ia akan menjalankan program dalam cangkang semasa.

$ Cat> Run-Py.Py Echo $ Shell Print ("Hello World") $ chmod +x run-py.py $ ./run-py.py 
Penterjemah yang salah dalam skrip

Dalam kes ini, anda boleh menghubungi program dengan menyebutkan penterjemah yang harus dikemukakan atau hanya menambah Shebang garis yang selalu disyorkan.

# Python3 $ (yang python3)/home/karthick/run_py.py 
Skrip panggilan dengan jurubahasa

Sekarang anda tahu bagaimana memanggil skrip, langkah seterusnya adalah untuk memahami apa yang berlaku apabila kita memanggil skrip. Apabila anda memanggil skrip seperti yang ditunjukkan dalam contoh di atas, ia akan membuat proses kanak -kanak (forking) dan skrip akan dikemukakan kepada proses kanak -kanak. Saya menjalankan skrip sampel yang hanya akan menjalankan arahan berikut dan menunjukkan skrip dikemukakan kepada proses kanak -kanak.

$ ps -ef --forest | grep -i bash 
Forking

Terdapat banyak proses kanak -kanak sebagai sebahagian daripada skrip dan bergantung pada kod kami. Harus diperhatikan bahawa pembolehubah persekitaran yang dibuat oleh subskrip akan dijatuhkan setelah selesai. Proses kanak -kanak boleh mengakses pembolehubah yang dibuat oleh proses induk dengan mengeksportnya. Tetapi proses induk tidak dapat mengakses pembolehubah yang dibuat oleh proses anak.

Lihat artikel di bawah untuk memahami lebih lanjut mengenai bagaimana pembolehubah berfungsi dan bagaimana untuk mengeksport pembolehubah.

  • Memahami dan Menulis 'Pembolehubah Linux' dalam skrip shell
  • Belajar Perbezaan antara $$ dan $ Bashpid di Bash

Sumber skrip

"Sumber"Adakah arahan terbina dalam shell yang membaca fail yang diluluskan sebagai hujah dan menjalankan kod dalam persekitaran shell semasa. Kes penggunaan yang sesuai yang anda gunakan kebanyakannya mengubahsuai konfigurasi anda di .Bashrc atau .BASH_PROFILE dan memuatkan semula perubahan menggunakan perintah sumber.

$ type -a Sumber 
Perintah shell binaan

Terdapat dua cara sintaksis untuk menjalankan perintah sumber. Anda boleh memilih sesiapa dari dua sintaks dan ia adalah pilihan peribadi.

$ sumber file_name [argumen] $ . File_name [argumen] 

Izinkan saya menunjukkan bagaimana sumber sebenarnya berfungsi. Saya akan membuat dua skrip shell. Skrip pertama (Modul.sh) akan memegang beberapa pembolehubah dan fungsi. Skrip kedua (Utama.sh) akan mencetak pemboleh ubah dan memanggil fungsi.

Fail Modul.sh.

#!/usr/bin/env bash var1 = $ (echo "Selamat datang ke $ 1") fungsi f1 () echo "function f1 dipanggil" 

Fail Utama.sh.

#!/usr/bin/env bash echo $ var1 f1 
Contoh kod skrip

Tetapkan kebenaran pelaksanaan untuk skrip dan panggil skrip utama "Utama.sh ". Sekarang, skrip ini akan cuba mencari fungsi F1 dan pemboleh ubah Var1 dalam persekitaran shell semasa dan akan gagal dengan arahan tidak dijumpai.

$ bash utama.sh 
Sebelum skrip sumber

Sekarang mari kita jalankan arahan sumber di dalam skrip yang akan memuatkan pembolehubah dan berfungsi ke dalam persekitaran shell semasa dan yang boleh diakses oleh "Utama.sh ".

Fail Modul.sh.

#!/usr/bin/env bash var1 = $ (echo "Selamat datang ke $ 1") fungsi f1 () echo "f1 dipanggil" 

Fail Utama.sh.

#!/modul sumber usr/bin/env bash.sh tecmint echo $ var1 f1 
Contoh kod skrip dengan sumber

Sekarang jalankan skrip lagi dan lihat.

$ bash utama.sh 
Selepas skrip sumber

The sumber sangat berguna dalam bash Untuk mengikuti pendekatan pengaturcaraan modular dalam membuat skrip shell kami. Kami boleh memecahkan kod kami ke dalam modul yang lebih kecil dan boleh digunakan dalam banyak program. Dengan cara ini, kita boleh mengikuti Kering (Jangan ulangi diri anda) prinsip.

Itu sahaja untuk artikel ini. Kami telah membincangkan secara ringkas perbezaan antara penyumberan dan penangkapan di bash. Pergi melalui artikel dan kongsi maklum balas berharga anda dengan kami.