Belajar Perbezaan Antara Penyumberan dan Forking di Bash
- 643
- 169
- Daryl Wilderman
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_worldJalankan 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.pyPenterjemah 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.pySkrip 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 bashForking
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 SumberPerintah 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 f1Contoh 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.shSebelum 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 f1Contoh kod skrip dengan sumber
Sekarang jalankan skrip lagi dan lihat.
$ bash utama.shSelepas 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.
- « Ebook Memperkenalkan Panduan Persediaan Virtualisasi KVM Untuk Linux
- Cara Memisahkan Skrin Vim Horizontally dan Vertikal di Linux »