/etc/profile dipanggil hanya untuk shell login karena itulah tujuan spesifiknya.
Jika Anda ingin menjalankan perintah untuk shell interaktif yang bukan shell login, dan Anda menggunakannya bash, masukkan ~/.bashrcatau /etc/bash.bashrc.
Tujuan dari file "profil" adalah berisi perintah yang seharusnya dijalankan hanya untuk shell login. File-file ini adalah:
/etc/profile, dijalankan oleh semua shell yang kompatibel dengan Bourne (termasuk bashdan dash) ketika dimulai sebagai shell login.
Script dalam /etc/profile.d.
Ini untuk cangkang Bourne-style, tetapi tidak dikodekan ke dalam cangkang executable itu sendiri. Sebaliknya, perintah dalam /etc/profilepanggilan mereka. Misalnya, pada sistem Ubuntu 12.04 saya, /etc/profilesertakan baris-baris ini:
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
.profile di direktori home pengguna, dijalankan oleh shell yang kompatibel dengan Bourne ketika dimulai sebagai shell login (kecuali diganti, lihat di bawah).
.bash_profileatau .bash_logindi direktori home pengguna. Ini diabaikan oleh kerang selain bash. Tetapi jika .bash_profileada, bashjalankan bukan .profile . Jika .bash_profiletidak ada tetapi .bash_loginada, itu dijalankan alih-alih .profile.
(Tapi itu umum untuk .bash_profileatau .bash_login, ketika ada, harus ditulis sehingga * secara eksplisit memanggil .profile.)
Manfaat dari file profil khusus shell adalah mereka dapat berisi perintah atau sintaksis yang hanya valid untuk shell itu. Sebagai contoh, saya dapat menggunakan [[operator evaluasi di .bash_profile/ .bash_logintetapi jika saya menggunakannya di .profiledan kemudian masuk dengan dashsebagai shell saya, itu akan gagal.
Apa Yang Harus Masuk Dalam File "profil"
File "profil" harus berisi perintah yang seharusnya hanya dijalankan sekali, pada awal login. (Ini termasuk login grafis, karena mereka mulai dengan shell login juga.) Jika shell interaktif, pengguna yang menjalankannya mungkin logon, dan mungkin memiliki leluhur (yang memulai, atau memulai apa yang memulai, atau memulai itu, dll.) itu adalah shell login.
Anda mungkin ingin menjalankan perintah hanya sekali karena:
- tidak ada alasan untuk menjalankannya lebih dari satu kali per login, itu tidak efisien, atau
- itu akan menghasilkan hasil yang tidak diinginkan, untuk menjalankannya lebih dari sekali per login.
Sebagai contoh situasi kedua, di mana hasil yang tidak diinginkan akan muncul, pertimbangkan baris-baris ini, yang muncul secara default di setiap pengguna ~/.profile:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Misalkan Anda SSH masuk, jalankan shell lain (katakanlah, zsh), pada titik tertentu ditemukan Anda ingin kembali sementara bashtetapi tetap menggunakan lingkungan Anda (jadi larilah bashlagi ketika masuk zsh), lalu jalankan program seperti mcmenjalankan shell sebagai bagian antarmuka-nya. Jika binada di folder rumah Anda dan nama pengguna Anda adalah james, Anda PATHdi shell paling dalam adalah sesuatu seperti:
/home/james/bin:/home/james/bin:/home/james/bin:/home/james/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Itu tidak efisien dan (jauh lebih penting) membuatnya sulit untuk memahami isinya PATH.
Ini sama sekali bukan bencana. Sejauh yang saya tahu, jika setiap shell interaktif bersumber file "profil", tidak ada hal buruk yang akan terjadi, dalam konfigurasi default . Namun, karena tujuan dari file "profil" adalah berisi perintah untuk hanya menjalankan sekali per login , pengguna atau administrator dapat menambahkan perintah ke profil yang hanya harus dijalankan ketika memulai shell login.
Tempat Menempatkan Perintah untuk Setiap Shell Interaktif untuk Dijalankan
Jika Anda menggunakan bash, ada file untuk perintah yang harus dijalankan di setiap shell interaktif:
/etc/bash.bashrc
.bashrc di direktori home pengguna.
Ini paling umum digunakan untuk perintah itu
- hanya mempengaruhi lingkungan shell di mana mereka menjalankan - bahkan kulit anak, atau
- harus dijalankan walaupun ini bukan shell login.
Sebagai contoh, penyelesaian-tab-baris perintah umumnya harus diaktifkan apakah bashshell login atau tidak . Jadi ini muncul di ~/.bashrc:
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi
Di sana, 1 dan 2 keduanya berlaku: ini tidak terbawa ke shell lain yang dijalankan di dalam yang ini, dan penyelesaian tab harus bekerja bashbahkan jika saya masuk dengan shell yang berbeda.
Tempat Menempatkan Perintah untuk Shells Login dan Shells non-Login Interaktif
Jika Anda menggunakan bashdan ingin menjalankan perintah di shell login dan shell interaktif dan yang bukan shell login, biasanya cukup untuk memasukkannya ke dalam /etc/bash.bashrcatau~/.bashrc . Ini karena, secara default, /etc/profiledan ~/.profilemenjalankannya secara eksplisit. Misalnya, ~/.profilememiliki:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
(Demikian pula, /etc/profilesumber /etc/bash.bashrcuntuk bash.)
Dengan demikian, kedua file "profil" dan "rc" berjalan ketika Anda memulai bashshell interaktif (apakah itu shell login atau tidak).
Tempat Menempatkan Perintah untuk Menjalankan di Kerang non-Interaktif
Anda mungkin tidak ingin menentukan perintah apa pun untuk menjalankan semua shell non-interaktif; mereka akan berjalan setiap kali skrip dijalankan (asalkan skrip dijalankan oleh shell yang Anda konfigurasikan untuk menjalankannya).
Ini dapat menyebabkan kerusakan substansial. Jika Anda akan melakukan ini, dan tidak ada akun administrator di sistem selain yang Anda gunakan, Anda mungkin ingin membuatnya; yang dapat membuatnya lebih mudah untuk memperbaiki kesalahan.
Dalam bash, file "rc" sebenarnya dijalankan apakah shell itu interaktif atau tidak . Namun, di bagian atas mereka mengatakan:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Jadi, jika Anda memerlukan perintah untuk menjalankan secara otomatis bahkan dalam shell non-interaktif seperti yang dijalankan untuk menjalankan skrip, Anda dapat menambahkan perintah Anda sebelum baris tersebut.
Memulai Shell Login
Masuk log memulai shell login. Jika Anda ingin shell dimulai setelah itu berperilaku sebagai shell login, mulailah dengan -lflag (singkatan dari l ogin ). Sebagai contoh:
Itulah cara terbaik untuk memulai shell login (tanpa masuk) kecuali jika Anda ingin memulai sebagai pengguna lain . Kemudian, gunakan:
sudo -iuntuk root(digunakan sudo -suntuk shell root interaktif, non-login)
sudo -u username -i untuk setiap pengguna
su - usernameuntuk non- rootpengguna (gunakan untuk shell root interaktif, non-login)su username
Apa itu shell login awal ?
Sebuah shell login awal adalah sama sebagai shell login . Di mana-mana jawaban ini mengatakan "shell login" bisa juga mengatakan "shell login inital" (kecuali di bagian ini, yang sudah berhenti masuk akal).
Salah satu alasan untuk istilah shell login inital adalah bahwa shell login juga digunakan dalam arti yang berbeda - untuk mengidentifikasi program mana yang digunakan sebagai shell yang dijalankan dengan masuk. Ini adalah arti dari shell login yang digunakan untuk mengatakan:
Bacaan lebih lanjut