/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 ~/.bashrc
atau /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 bash
dan 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/profile
panggilan mereka. Misalnya, pada sistem Ubuntu 12.04 saya, /etc/profile
sertakan 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_profile
atau .bash_login
di direktori home pengguna. Ini diabaikan oleh kerang selain bash
. Tetapi jika .bash_profile
ada, bash
jalankan bukan .profile
. Jika .bash_profile
tidak ada tetapi .bash_login
ada, itu dijalankan alih-alih .profile
.
(Tapi itu umum untuk .bash_profile
atau .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_login
tetapi jika saya menggunakannya di .profile
dan kemudian masuk dengan dash
sebagai 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 bash
tetapi tetap menggunakan lingkungan Anda (jadi larilah bash
lagi ketika masuk zsh
), lalu jalankan program seperti mc
menjalankan shell sebagai bagian antarmuka-nya. Jika bin
ada di folder rumah Anda dan nama pengguna Anda adalah james
, Anda PATH
di 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 bash
shell 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 bash
bahkan jika saya masuk dengan shell yang berbeda.
Tempat Menempatkan Perintah untuk Shells Login dan Shells non-Login Interaktif
Jika Anda menggunakan bash
dan ingin menjalankan perintah di shell login dan shell interaktif dan yang bukan shell login, biasanya cukup untuk memasukkannya ke dalam /etc/bash.bashrc
atau~/.bashrc
. Ini karena, secara default, /etc/profile
dan ~/.profile
menjalankannya secara eksplisit. Misalnya, ~/.profile
memiliki:
# 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/profile
sumber /etc/bash.bashrc
untuk bash
.)
Dengan demikian, kedua file "profil" dan "rc" berjalan ketika Anda memulai bash
shell 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 -l
flag (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 -i
untuk root
(digunakan sudo -s
untuk shell root interaktif, non-login)
sudo -u username -i
untuk setiap pengguna
su - username
untuk non- root
pengguna (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