GNU/Linux >> Belajar Linux >  >> Linux

Impor fungsi dan variabel ke Bash dengan perintah sumber

Saat Anda masuk ke shell Linux, Anda mewarisi lingkungan kerja tertentu. Sebuah lingkungan , dalam konteks shell, berarti ada variabel tertentu yang telah ditetapkan untuk Anda, yang memastikan perintah Anda berfungsi sebagaimana dimaksud. Misalnya, variabel lingkungan PATH menentukan di mana shell Anda mencari perintah. Tanpanya, hampir semua yang Anda coba lakukan di Bash akan gagal dengan perintah tidak ditemukan kesalahan. Lingkungan Anda, meskipun sebagian besar tidak terlihat oleh Anda saat melakukan tugas sehari-hari, sangat penting.

Ada banyak cara untuk mempengaruhi lingkungan shell Anda. Anda dapat membuat modifikasi pada file konfigurasi, seperti ~/.bashrc dan ~/.profile , Anda dapat menjalankan layanan saat startup, dan Anda dapat membuat perintah kustom atau skrip fungsi Bash Anda sendiri.

Tambahkan ke lingkungan Anda dengan sumber

Bash (bersama dengan beberapa shell lainnya) memiliki perintah bawaan yang disebut source . Dan di sinilah hal itu bisa membingungkan:source melakukan fungsi yang sama dengan perintah . (ya, itu hanya satu titik), dan itu bukan source yang sama sebagai Tcl perintah (yang mungkin muncul di layar Anda jika Anda mengetik man source ). source . bawaan perintah tidak ada di PATH . Anda sama sekali, sebenarnya. Ini adalah perintah yang disertakan sebagai bagian dari Bash, dan untuk mendapatkan informasi lebih lanjut tentangnya, Anda dapat mengetik help source .

. perintah sesuai dengan POSIX. source perintah tidak didefinisikan oleh POSIX tetapi dapat dipertukarkan dengan . perintah.

Selengkapnya tentang Bash

  • Lembar contekan bash
  • Pengantar pemrograman dengan Bash
  • Panduan sysadmin untuk skrip Bash
  • Artikel Bash terbaru

Menurut help Bash , source perintah mengeksekusi file di shell Anda saat ini. Klausa "di shell Anda saat ini" penting, karena itu berarti tidak meluncurkan sub-kulit; oleh karena itu, apa pun yang Anda jalankan dengan source terjadi di dalam dan memengaruhi saat ini . Anda lingkungan.

Sebelum menjelajahi bagaimana source dapat mempengaruhi lingkungan Anda, coba source pada file uji untuk memastikan bahwa itu mengeksekusi kode seperti yang diharapkan. Pertama, buat skrip Bash sederhana dan simpan sebagai file bernama hello.sh :

#!/usr/bin/env bash
echo "halo dunia"

Menggunakan source , Anda dapat menjalankan skrip ini bahkan tanpa menyetel bit yang dapat dieksekusi:

$ source hello.sh
hello world

Anda juga dapat menggunakan. perintah untuk hasil yang sama:

$ . hello.sh
halo dunia

source dan . perintah berhasil mengeksekusi konten file pengujian.

Menyetel variabel dan fungsi impor

Anda dapat menggunakan source untuk "mengimpor" file ke lingkungan shell Anda, sama seperti Anda menggunakan include kata kunci dalam C atau C++ untuk mereferensikan perpustakaan atau import kata kunci di Python untuk membawa modul. Ini adalah salah satu kegunaan paling umum untuk source , dan ini adalah penyertaan default umum di .bashrc file ke source file bernama .bash_aliases sehingga setiap alias khusus yang Anda tentukan akan diimpor ke lingkungan Anda saat Anda masuk.

Berikut adalah contoh mengimpor fungsi Bash. Pertama, buat fungsi dalam file bernama myfunctions . Ini mencetak alamat IP publik Anda dan alamat IP lokal Anda:

function myip() {
        curl http://icanhazip.com      

        ip addr | grep inet$IP | \
        cut -d"/" -f 1 | \
        grep -v 127\.0 | \
        grep -v \:\:1 | \
        awk '{$1=$1};1'
}

Impor fungsi ke dalam shell Anda:

$ source myfunctions 

Uji fungsi baru Anda:

$ myip
93.184.216.34
inet 192.168.0.23
inet6 fbd4:e85f:49c:2121:ce12:ef79:0e77:59d1
inet 10.8.42.38

Telusuri sumber

Saat Anda menggunakan source di Bash, ia mencari direktori Anda saat ini untuk file yang Anda referensikan. Ini tidak terjadi di semua shell, jadi periksa dokumentasi Anda jika Anda tidak menggunakan Bash.

Jika Bash tidak dapat menemukan file yang akan dieksekusi, Bash akan mencari PATH . Anda sebagai gantinya. Sekali lagi, ini bukan default untuk semua shell, jadi periksa dokumentasi Anda jika Anda tidak menggunakan Bash.

Ini adalah kedua fitur kenyamanan yang bagus di Bash. Perilaku ini sangat kuat karena memungkinkan Anda untuk menyimpan fungsi umum di lokasi terpusat di drive Anda dan kemudian memperlakukan lingkungan Anda seperti lingkungan pengembangan terintegrasi (IDE). Anda tidak perlu khawatir tentang di mana fungsi Anda disimpan, karena Anda tahu bahwa fungsi tersebut setara dengan /usr/include lokal Anda. , jadi di mana pun Anda berada saat Anda mencarinya, Bash akan menemukannya.

Misalnya, Anda dapat membuat direktori bernama ~/.local/include sebagai tempat penyimpanan untuk fungsi-fungsi umum dan kemudian masukkan blok kode ini ke dalam .bashrc . Anda berkas:

untuk saya di $HOME/.local/include/*;
  lakukan sumber $i
selesai

Ini "mengimpor" file apa pun yang berisi fungsi khusus di ~/.local/include ke dalam lingkungan shell Anda.

Bash adalah satu-satunya shell yang mencari direktori saat ini dan PATH . Anda ketika Anda menggunakan salah satu source atau . perintah.

Menggunakan sumber untuk sumber terbuka

Menggunakan source atau . untuk mengeksekusi file bisa menjadi cara yang nyaman untuk mempengaruhi lingkungan Anda sambil menjaga perubahan Anda tetap modular. Lain kali Anda berpikir untuk menyalin dan menempelkan blok besar kode ke .bashrc Anda file, pertimbangkan untuk menempatkan fungsi terkait atau grup alias ke dalam file khusus, lalu gunakan source untuk menelannya.


Linux
  1. Menavigasi shell Bash dengan pushd dan popd

  2. Menggunakan riwayat bash untuk mendapatkan perintah sebelumnya, salin dan kemudian 'jalankan' tetapi dengan perintah yang dikomentari

  3. '&&' vs. '&' dengan perintah 'test' di Bash

  1. Putar dan arsipkan log dengan perintah Linux logrotate

  2. Tonton perintah dan tugas dengan perintah jam tangan Linux

  3. Salin dan tempel di baris perintah Linux dengan xclip

  1. Temukan file dan direktori di Linux dengan perintah find

  2. Masuk ke gulma dengan Buildah:Perintah unshare buildah

  3. Pisahkan file menjadi beberapa bagian dengan perintah split bawaan