Tergantung pada fungsinya. Jika itu hanya satu-liner super-sederhana seperti itu Anda bisa membuat alias atau menempelkan fungsi dalam ~/.bashrc(file yang memuat bash saat dimulai).
Jika Anda membuat sesuatu yang sedikit lebih gemuk, mungkin lebih masuk akal untuk membuat skrip yang dapat dieksekusi sendiri di ~/bin/mana tidak akan ada secara default (itu hanya sebuah direktori) tetapi harus berada di jalur Anda. Ingat untuk ini file harus dapat dieksekusi ( chmod +x filename) dan mulai dengan #!/bin/bashbait yang tepat .
Rute kedua memiliki beberapa manfaat jelas:
Lebih mudah untuk melihat apa yang tersedia
Kesalahan sintaksis tidak akan memangkas profil Anda
Anda tidak perlu terus membuat ulang bash config Anda jika Anda mengubah skrip
Ini tersedia untuk semua shell selama path lengkap digunakan atau ~/bin/dalam path untuk shell itu juga (yang seharusnya dalam kebanyakan kasus AFAIK).
Saya menggunakan opsi nanti. Fungsi saya berisi perintah yang menghapus file, sesuatu wget, mengeksekusi perintah javac dan java. dan ketika saya mencobanya di terminal gnome, itu tidak berfungsi dengan baik. Apakah Anda pikir ada masalah?
Abel Melquiades Callejo
Apa yang dilakukannya?
Oli
Sudah diperbaiki. Diperbaiki melalui jawaban ini
Abel Melquiades Callejo
umm ... bukankah skrip pengguna harus di /usr/local/binganggu dengan $PATH?
Braiam
Sepertinya saya bahwa keuntungan kecil tapi layak disebutkan menempatkan fungsi di ~/.bashrc(karena sourced) adalah bahwa Bash mencari fungsi sebelum melakukan pencarian PATH.
Zanna
4
Pilihan terbaik adalah ~/.bashrcfile.
Anda dapat menulis definisi fungsi shell Anda langsung di ~/.bashrcfile Anda , atau, jika Anda memiliki banyak dari mereka dan tidak ingin mengacaukan ~/.bashrcfile Anda, Anda dapat meletakkan semuanya di file lain yang Anda pilih - pastikan untuk sumber itu file dalam file Anda ~/.bashrc. Misalnya, jika file dengan fungsi Anda dinamai bash_functions, cukup tambahkan ~/.bashrcfile Anda baris:
if[[-f /path/to/bash_functions ]];then
source /path/to/bash_functions
fi
atau, yang setara:
if[[-f /path/to/bash_functions ]];then./path/to/bash_functions
fi
di mana .hanya merupakan representasi simbolis dari source. The ifuji merek yakin file /path/to/bash_functionsada sebelum mencoba untuk sumber itu.
Teknik ini sangat mirip dengan membangun alias ~/.bashrcdengan membuat file yang dipanggil ~/.bash_aliasesdan menggunakan sintaksis yang sama dengan yang di atas ~/.bashrcuntuk menguji keberadaannya dan kemudian sumber itu.
terima kasih, itu berhasil. Ngomong-ngomong, apa bedanya dengan .profile? di beberapa linux, saya tidak bisa meletakkan fungsi di bashrc
Abel Melquiades Callejo
2
~/.profilefile dieksekusi oleh interpreter perintah untuk shell login. Ketika Anda menggunakan GUI dan Anda membuka terminal, file itu tidak dieksekusi karena Anda akan berada di shell tidak masuk.
Radu Rădeanu
1
Berikut adalah prosedur penting untuk mendeklarasikan fungsi permanen:
Buka ~/.bashrcfile dalam editor teks. Tidak masalah editor teks mana, asalkan Anda tahu cara menggunakannya dan selama Anda membuka/home/<username>/.bashrc
Di akhir ~/.bashrcmenyatakan fungsi Anda sendiri, misalnya:
find_dirs(){
find "$1"-type d
}
Simpan dan tutup file.
The ~/.bashrcfile dibaca setiap kali Anda membuka shell interaktif (yang tab baru terminal, login melalui ssh, atau tty1 terbuka atau konsol virtual lainnya). Ini tidak akan tersedia dalam file skrip, karena ~/.bashrctidak dibaca untuk shell non-interaktif. Ini juga tidak tersedia jika Anda menjalankan bashdengan --norcopsi.
Jika Anda ingin fungsi tersedia segera di tab yang sedang terbuka, gunakan source ~/.bashrcperintah.
Fungsi mengambil argumen seperti perintah biasa. Misalnya, $1dengan $9menunjukkan parameter posisi saat Anda memanggil suatu fungsi. Dalam contoh di atas hanya find_dirsmengambil satu parameter posisi, dan akan disebut sebagai find_dirs /etc. Anda juga dapat menggunakan $@untuk merujuk ke semua parameter posisi. Fungsinya juga menerima pengalihan. Anda dapat memanggil suatu fungsi dengan find_dirs $1 > /dev/null; kami juga dapat mendeklarasikannya sebagai berikut:
find_dirs(){
find "$1"-type d
}
Catatan dari man bash: "Fungsi dijalankan dalam konteks shell saat ini; tidak ada proses baru yang dibuat untuk menafsirkannya". Itu berarti Anda juga harus mengetahui fungsi yang memiliki kemampuan untuk mengubah lingkungan eksekusi shell Anda - ubah variabel dan pengaturan terminal.
/usr/local/bin
ganggu dengan$PATH
?~/.bashrc
(karenasource
d) adalah bahwa Bash mencari fungsi sebelum melakukan pencarian PATH.Pilihan terbaik adalah
~/.bashrc
file.Anda dapat menulis definisi fungsi shell Anda langsung di
~/.bashrc
file Anda , atau, jika Anda memiliki banyak dari mereka dan tidak ingin mengacaukan~/.bashrc
file Anda, Anda dapat meletakkan semuanya di file lain yang Anda pilih - pastikan untuk sumber itu file dalam file Anda~/.bashrc
. Misalnya, jika file dengan fungsi Anda dinamaibash_functions
, cukup tambahkan~/.bashrc
file Anda baris:atau, yang setara:
di mana
.
hanya merupakan representasi simbolis darisource
. Theif
uji merek yakin file/path/to/bash_functions
ada sebelum mencoba untuk sumber itu.Teknik ini sangat mirip dengan membangun alias
~/.bashrc
dengan membuat file yang dipanggil~/.bash_aliases
dan menggunakan sintaksis yang sama dengan yang di atas~/.bashrc
untuk menguji keberadaannya dan kemudian sumber itu.sumber
~/.profile
file dieksekusi oleh interpreter perintah untuk shell login. Ketika Anda menggunakan GUI dan Anda membuka terminal, file itu tidak dieksekusi karena Anda akan berada di shell tidak masuk.Berikut adalah prosedur penting untuk mendeklarasikan fungsi permanen:
Buka
~/.bashrc
file dalam editor teks. Tidak masalah editor teks mana, asalkan Anda tahu cara menggunakannya dan selama Anda membuka/home/<username>/.bashrc
Di akhir
~/.bashrc
menyatakan fungsi Anda sendiri, misalnya:Simpan dan tutup file.
The
~/.bashrc
file dibaca setiap kali Anda membuka shell interaktif (yang tab baru terminal, login melaluissh
, atau tty1 terbuka atau konsol virtual lainnya). Ini tidak akan tersedia dalam file skrip, karena~/.bashrc
tidak dibaca untuk shell non-interaktif. Ini juga tidak tersedia jika Anda menjalankanbash
dengan--norc
opsi.Jika Anda ingin fungsi tersedia segera di tab yang sedang terbuka, gunakan
source ~/.bashrc
perintah.Fungsi mengambil argumen seperti perintah biasa. Misalnya,
$1
dengan$9
menunjukkan parameter posisi saat Anda memanggil suatu fungsi. Dalam contoh di atas hanyafind_dirs
mengambil satu parameter posisi, dan akan disebut sebagaifind_dirs /etc
. Anda juga dapat menggunakan$@
untuk merujuk ke semua parameter posisi. Fungsinya juga menerima pengalihan. Anda dapat memanggil suatu fungsi denganfind_dirs $1 > /dev/null
; kami juga dapat mendeklarasikannya sebagai berikut:Catatan dari
man bash
: "Fungsi dijalankan dalam konteks shell saat ini; tidak ada proses baru yang dibuat untuk menafsirkannya". Itu berarti Anda juga harus mengetahui fungsi yang memiliki kemampuan untuk mengubah lingkungan eksekusi shell Anda - ubah variabel dan pengaturan terminal.sumber