GNU/Linux >> Belajar Linux >  >> Linux

Apa lokasi yang benar untuk variabel PS1 Shell?

PS1 variabel shell harus diatur dalam ~/.bashrc untuk bash shell karena itu adalah file inisialisasi yang dibaca untuk sesi shell interaktif.

Perhatikan bahwa variabel ini adalah variabel shell , bukan variabel lingkungan (tidak masuk akal membiarkan proses turunan mewarisi nilainya, dan hanya shell saat ini yang menggunakannya). Oleh karena itu tidak perlu diekspor dengan export .

Terkait:

  • Apa tujuan .bashrc dan bagaimana cara kerjanya?

Anda tidak perlu memulai bash dari salah satu file startup shell. Memulai shell tertentu dari ~/.profile (atau file terkait yang terkait dengan shell login Anda) mungkin diperlukan jika sistem yang Anda jalankan tidak memungkinkan Anda untuk mengubah shell login Anda. Harus berhati-hati untuk tidak mulai shell lain jika itu adalah shell yang sudah mengeksekusi file, atau Anda mungkin berakhir dalam semacam loop tak terbatas.

exec kode yang Anda tambahkan ke ~/.bash_profile Anda seharusnya tidak pernah dibutuhkan. Saya kira itu adalah cara untuk mendapatkan ~/.bashrc untuk diuraikan (ini memulai shell interaktif, dan bash interaktif shell membaca ~/.bashrc ). Cara yang lebih baik untuk melakukannya adalah memiliki salah satu sumber file yang lain, misalnya menggunakan ini di ~/.bash_profile :

if [[ -f $HOME/.bashrc ]]; then
    source "$HOME/.bashrc"
fi

Kemudian atur PS1 di ~/.bashrc (seharusnya tidak perlu menyentuh HOME atau TERM ).

Hal lain yang dilakukan perintah adalah membersihkan semua variabel lingkungan lainnya menggunakan env -i . Kecuali jika Anda memiliki alasan yang sangat spesifik untuk melakukan ini, Anda tidak boleh melakukannya dari file startup shell biasa.


Mengutip dari halaman manual bash:

When  bash is invoked as an interactive login shell, or as a non-interactive
shell with the --login option, it first reads and executes commands from the
file  /etc/profile,  if that file exists.  After reading that file, it looks
for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads
and  executes  commands from the first one that exists and is readable.  The
--noprofile option may be used when the shell is  started  to  inhibit  this
behavior.

When  a  login  shell  exits, bash reads and executes commands from the file
~/.bash_logout, if it exists.

When an interactive shell that is not a login shell is started,  bash  reads
and  executes  commands  from /etc/bash.bashrc and ~/.bashrc, if these files
exist.  This may be inhibited by using the --norc option.  The --rcfile file
option  will  force  bash  to read and execute commands from file instead of
/etc/bash.bashrc and ~/.bashrc.

Jadi sangat tergantung pada bagaimana Anda memulai shell.

  • Jika Anda ingin memiliki PS1 Anda aktif di semua login shell (misalnya melalui su - <user> atau saat login jarak jauh melalui ssh ), letakkan di profil .
  • Jika Anda ingin memiliki PS1 Anda aktif di semua non-login shell (mis. hanya membuka terminal lain di lingkungan desktop Anda), masukkan ke dalam bashrc .
  • Jika Anda ingin mengaktifkannya dalam kedua kasus, Anda harus memasukkannya ke dalam kedua file, atau (yang dilakukan oleh sebagian Linux setidaknya dalam kasus /etc/profile dan /etc/bash.bashrc ), sumber .bashrc di .profile .

PS1 harus dalam .bashrc . Anda juga bisa mengaturnya di .profile .

Sumber Debian .bashrc dari sana:

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

Linux
  1. Apa tujuan dari file .bashrc di Linux?

  2. Cakupan variabel untuk skrip bash shell dan fungsi dalam skrip

  3. Apa lokasi file mysql.sock yang benar di linux

  1. Apa ruang lingkup yang diekspor dalam variabel shell Unix?

  2. Apa titik pemasangan yang paling tepat untuk partisi NTFS permanen?

  3. Apa cara terbaik untuk mengatur variabel lingkungan di .bashrc?

  1. Apa yang dapat dilakukan shell dotfile untuk Anda

  2. Apa shell default Busybox?

  3. Apa perbedaan antara menggunakan hulu dan lokasi untuk php-fpm?