Saya telah mendefinisikan bash
fungsi dalam ~/.bashrc
file saya . Ini memungkinkan saya untuk menggunakannya di terminal shell. Namun, sepertinya tidak ada ketika saya menyebutnya dari dalam skrip.
Bagaimana saya bisa mendefinisikan bash
fungsi yang akan digunakan oleh skrip juga?
bash
shell-script
function
Onturenio
sumber
sumber
/bin/sh
jalur shebang?Jawaban:
~/.bash_profile
dan~/.bashrc
tidak dibaca oleh skrip, dan fungsi tidak diekspor secara default. Untuk melakukannya, Anda dapat menggunakanexport -f
seperti:export -f foo
juga bisa dipanggil~/.bash_profile
untuk membuat fungsi ini tersedia untuk skrip setelah masuk. Berhati-hatilah karenaexport -f
tidak portabel.Solusi yang lebih baik adalah dengan sumber file yang berisi fungsi menggunakan
. file
. Ini jauh lebih portabel, dan tidak bergantung pada lingkungan Anda diatur dengan cara tertentu.sumber
function myFunction { ... }
di~/.bash_profile
dan Anda baik untuk pergi?export
solusinya tampaknya berfungsi dengan baik. Terima kasih.foo
fungsi dari beberapafile
2) Anda dapat lebih mengontrol konten itufile
daripada memastikan bahwa shell yang memanggil tidak berubahfoo
sebelum menjalankan skrip Anda. Anda dapat menambahkan pemeriksaan keamananfile
untuk memastikan itu tidak rusak, misalnya. (tidak mudah, tetapi mungkin). (yah, Anda juga bisa melakukan pemeriksaan pada fungsi foo yang ditentukan ... tetapi Anda mengertifile
maksud saya ^^ Saya pikir metode 2 lebih bersih.) 3) hanya akan berisi apa yang dibutuhkan, bukan lebih..bashrc
hanya dibaca oleh cangkang interaktif. (Sebenarnya, itu penyederhanaan berlebihan: bash unik dalam hal ini. Bash tidak membaca.bashrc
apakah itu shell login, interaktif atau tidak. Dan ada pengecualian bahkan untuk pengecualian: jika proses induk bash adalahrshd
atausshd
, maka bash membaca.bashrc
, apakah itu interaktif atau tidak.)Letakkan definisi fungsi Anda dalam file di tempat yang diketahui, dan gunakan builtin
.
(juga diejasource
) untuk memasukkan file itu dalam skrip.Jika mau, Anda dapat mengikuti fitur pengisian otomatis ksh. Masukkan setiap definisi fungsi dalam file dengan nama yang sama dengan fungsi. Daftar direktori yang berisi definisi fungsi dalam
FPATH
variabel (daftar direktori yang dipisahkan oleh titik dua). Berikut ini perkiraan kasar dari kshautoload
yang sebenarnya memuat fungsi segera alih-alih sesuai permintaan:sumber
Apakah Anda memerlukan fungsi? Jika tidak, pertimbangkan untuk mencabut logika menjadi skrip Bash yang terpisah dan berdiri sendiri di blog Anda
$PATH
. Misalnya, saya punya ini di~/.bashrc
:~/bin
ada di saya$PATH
, jadi saya buat~/bin/wanip
dengan konten berikut:Dan berlari
chmod 0755 ~/bin/wanip
untuk membuatnya bisa dieksekusi. Sekarang saya dapat mengeksekusiwanip
dari skrip lain.Saya suka memiliki
wanip
skrip Bash yang berdiri sendiri. Ini mengingatkan saya bahwa saya ingin logika ini tersedia secara umum (selain hanya dalam sesi Bash interaktif saya saat ini). Script dengan baik merangkum logika dan dokumentasi yang sama.sumber