Pelajari perbedaan antara sumber dan bercabang di pesta bash

Pelajari perbedaan antara sumber dan bercabang di pesta bash

Fokus utama artikel ini adalah untuk memahami dengan jelas apa yang terjadi ketika Anda menjalankan Script vs Sumber skrip dalam bash. Pertama, kami akan dengan jelas memahami bagaimana program dikirimkan saat Anda memanggil skrip dengan cara yang berbeda.

CATATAN: Membuat skrip dengan ekstensi tidak masalah. Skrip akan berjalan dengan baik bahkan tanpa ekstensi.

Pada dasarnya, setiap skrip dimulai dengan garis yang disebut a peristiwa(#!). Itu Hash Simbol dalam bash akan ditafsirkan sebagai komentar tapi peristiwa memiliki arti khusus. Ini memberitahu Bash untuk mengirimkan program dalam penerjemah apa pun yang Anda sebutkan di peristiwa.

Di bawah ini adalah program sampel dan saya menentukan pesta sebagai penerjemah saya.

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

Sekarang untuk menjalankan skrip, Anda dapat melakukannya dengan dua cara.

  • Gunakan jalur relatif untuk memanggil skrip. Pindah ke direktori tempat skrip hadir dan jalankan ./Halo Dunia.SH.
  • Gunakan jalur absolut untuk memanggil skrip. Dari mana saja di sistem file ketik path lengkap ke skrip.
$ ./Halo Dunia.sh $ pwd $/home/karthick/hello_world 
Jalankan skrip shell

Sekarang mari kita lihat apa yang terjadi saat Anda mencoba mengirimkan program Anda tanpa peristiwa. Tanpa adanya peristiwa, Program akan diserahkan ke shell saat ini yang sedang Anda jalankan, dalam kasus saya, itu adalah Pesta (/bin/bash).

Izinkan saya mendemonstrasikan sebuah contoh. Saya membuat skrip Python tanpa peristiwa Dan saat saya menelepon program, pesta tidak tahu bahwa itu harus mengirimkan program ini ke penerjemah Python sebagai gantinya akan menjalankan program di shell saat ini.

$ kucing> run-py.py echo $ shell print ("hello world") $ chmod +x run-py.py $ ./run-py.py 
Penerjemah yang salah dalam skrip

Dalam hal ini, Anda dapat menghubungi program dengan menyebutkan penerjemah mana yang harus diserahkan atau hanya menambahkan peristiwa baris yang selalu direkomendasikan.

# python3 $ mana (yang python3)/home/karthick/run_py.py 
Panggil skrip dengan penerjemah

Sekarang Anda tahu cara memanggil skrip, langkah selanjutnya adalah memahami apa yang terjadi ketika kita memanggil skrip. Saat Anda memohon skrip seperti yang ditunjukkan dalam contoh -contoh di atas, itu akan membuat proses anak (forking) dan skrip akan diserahkan ke proses anak. Saya menjalankan skrip sampel yang hanya akan menjalankan perintah berikut dan menunjukkan skrip diserahkan ke proses anak.

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

Mungkin ada banyak proses anak sebagai bagian dari skrip dan itu tergantung pada kode kami. Perlu dicatat bahwa variabel lingkungan yang dibuat oleh subscript akan dijatuhkan setelah selesai. Proses anak dapat mengakses variabel yang dibuat oleh proses induk dengan mengekspornya. Tetapi proses induk tidak dapat mengakses variabel yang dibuat oleh proses anak.

Lihatlah artikel di bawah ini untuk memahami lebih lanjut tentang cara kerja variabel dan cara mengekspor variabel.

  • Memahami dan Menulis 'Variabel Linux' dalam Scripting Shell
  • Pelajari Perbedaan Antara $$ dan $ Bashpid di Bash

Sumber naskah

Sumber“Adalah perintah bawaan bawaan yang membaca file yang dilewati sebagai argumen untuk itu dan menjalankan kode di lingkungan shell saat ini. Kasus penggunaan yang tepat yang sebagian besar Anda gunakan adalah memodifikasi konfigurasi Anda .Bashrc atau .Bash_profile dan memuat ulang perubahan menggunakan Perintah Sumber.

$ type -a sumber 
Perintah Shell Builtin

Ada dua cara sintaksis untuk menjalankan Perintah Sumber. Anda dapat memilih siapa pun dari dua sintaksis dan itu adalah pilihan pribadi.

$ source file_name [argumen] $ . File_name [argumen] 

Izinkan saya mendemonstrasikan cara kerja sumber itu. Saya akan membuat dua skrip shell. Skrip pertama (Modul.SH) akan memiliki beberapa variabel dan fungsi. Skrip kedua (Utama.SH) akan mencetak variabel dan memanggil fungsinya.

Mengajukan Modul.SH.

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

Mengajukan Utama.SH.

#!/usr/bin/env bash echo $ var1 f1 
Contoh Kode Script

Atur izin eksekusi untuk skrip dan panggil skrip utama "utama.SH". Sekarang, skrip ini akan mencoba menemukan fungsinya f1 dan variabel Var1 di lingkungan shell saat ini dan akan gagal dengan perintah yang tidak ditemukan.

$ Bash Main.SH 
Sebelum sumber skrip

Sekarang mari kita jalankan perintah sumber di dalam skrip yang akan memuat variabel dan berfungsi ke lingkungan shell saat ini dan itu akan dapat diakses oleh "utama.SH".

Mengajukan Modul.SH.

#!/usr/bin/env bash var1 = $ (echo "selamat datang ke $ 1") fungsi f1 () echo "fungsi F1 disebut" 

Mengajukan Utama.SH.

#!/USR/BIN/Env Bash Source Module.sh tecmint echo $ var1 f1 
Contoh kode skrip dengan sumber

Sekarang jalankan skrip lagi dan lihat.

$ Bash Main.SH 
Setelah sumber skrip

Itu sumber sangat berguna dalam pesta untuk mengikuti pendekatan pemrograman modular dalam membuat skrip shell kami. Kita dapat memecah kode kita menjadi modul yang lebih kecil dan dapat digunakan dalam banyak program. Dengan cara ini, kita dapat mengikuti KERING (Jangan ulangi dirimu sendiri) prinsip.

Itu untuk artikel ini. Kami telah membahas secara singkat perbedaan antara sumber dan bercabang dalam pesta. Pergi melalui artikel dan bagikan umpan balik berharga Anda dengan kami.