GNU/Linux >> Belajar Linux >  >> Linux

Mengapa orang mencari bash_profile dari bashrc alih-alih sebaliknya?

Orang mengambil bash_profile dari bashrc alih-alih sebaliknya karena konvensi lokal .

Semua pendapat yang telah saya baca tentang bagaimana seseorang mengonfigurasi file startup mereka di 00 terutama didasarkan pada konvensi lokal. Konvensi lokal biasanya tidak menyebutkan gambaran besarnya karena tidak berbicara banyak tentang kasus non-login dan non-interaktif. Lucunya, dan saya sudah melihat, tapi saya jarang melihat ada yang menyebutkan 12 dalam semua pembicaraan mereka tentang mengapa meletakkan variabel dalam satu file startup versus yang lain. Nyatanya, saya belum pernah mendengar satu komentar mengatakan:"/bin/sh ada karena suatu alasan. Bash mengemulasi Bourne shell asli, /bin/sh, saat dipanggil seperti itu. " Untuk satu hal, dan saya sedikit ngelantur, kasus ini penting bagi orang yang bekerja dengan shell tidak hanya secara interaktif, tetapi juga menyediakan non-interaktif, non-login (tanpa pengawasan atau latar belakang ) 24 skrip yang memerlukan pemrosesan shell minimal yaitu pemrosesan latar belakang tidak memerlukan petunjuk berwarna, riwayat perintah dan substitusi, variabel $TERM yang ditentukan dengan benar, dll.

Selanjutnya dan sehubungan dengan 31 , yang biasanya saya lihat adalah orang-orang membuat jalur pencarian minimal atau memanggil program yang sepenuhnya memenuhi syarat, dan tidak tahu bagaimana menangani output yang tidak terhubung ke terminal (yaitu 41 non-interaktif, non-login atau 59 case) saat bekerja dengan 66 mereka skrip. Ini biasanya karena pemahaman yang baik tentang urutan startup shell tidak sepenuhnya dipahami, yang menyebabkan pengguna mengimplementasikan file startup mereka sendiri dengan cara yang tidak konsisten atau tidak koheren dengan konvensi yang sudah dibuat di 71 file startup.

Menguraikan, penyiapan yang dilakukan oleh konvensi lokal ditata dalam instalasi khusus itu dan 85 Shell file. Jika seseorang memeriksa 98 instalasi UNIX file, yang dipanggil sebagai bagian dari 101 biasa urutan startup, maka seseorang harus membuat start-up mereka sendiri dengan cara yang melengkapi konvensi yang ditetapkan dalam 117 tersebut file startup.

Proyek Dokumentasi Linux menyatakan:

/etc/skel/ File default untuk setiap pengguna baru disimpan di direktori ini. Setiap kali pengguna baru ditambahkan, file kerangka ini disalin ke direktori home mereka. Sistem rata-rata akan memiliki:file .alias, .bash_profile, .bashrc dan .cshrc. File lain diserahkan kepada administrator sistem.

Padahal 120 manual tidak menyebutkan file-file ini yang biasanya ditemukan di 138 direktori secara eksplisit, dari apa yang saya ingat, SunOS, Solaris, RedHat, Ubuntu, HP-UX, umips, &Ultrix memiliki 148 file untuk membuat pola file startup shell pengguna setelahnya. OSX jelas tidak - saya menggunakan OSX 10.9.1 sekarang. Sayangnya, OSX tidak memberi Anda banyak hal untuk dilakukan dalam hal bagaimana hal-hal harus diatur dalam hal konvensi, tetapi karena OSX adalah turunan BSD, saya hanya menggunakan turunan BSD lainnya, dan mempolakan 153 urutan startup setelah itu, menyesuaikannya agar sesuai dengan konvensi lokal yang digunakan di OSX 10.9.1 161 file startup.

Poin penting yang disebutkan dalam komentar paralel adalah bahwa untuk OSX, konvensinya adalah memulai setiap Terminal baru sebagai shell login interaktif. Ini memang default di OSX. Tidak ada masalah dengan konvensi ini selama pengguna instalasi konsisten. Perilaku default untuk Terminal di OSX dapat diubah agar sesuai dengan konvensi startup shell distribusi UNIX lainnya dengan melakukan perubahan berikut pada preferensi Terminal , khususnya, ubah setelan, 171 untuk mengeluarkan 189 perintah:

Dengan semua itu sebagai latar belakang atau pengantar, saya akan membahas nasihat terbaik saya , untuk apa nilainya.

Saran terbaik saya:

Periksa file yang telah ditempatkan oleh admin distribusi UNIX Anda. Mulailah dengan lokasi berikut, jika ada. Jangan lupa gunakan 193 perintah, karena beberapa file dimulai dengan titik. Lihat bagaimana file-file ini digunakan selama startup, dan lihat bagaimana file startup Anda berinteraksi dengannya:

/etc/bashrc
/etc/profile
/etc/skel/.bash_logout
/etc/skel/.bashrc
/etc/bash.bashrc
/etc/bash_completion

Lihat di 202 manual untuk doa dan urutan startup. Semuanya ditata dengan sangat baik.

Dengan semua itu sebagai peringatan - inilah cara saya melakukan hal-hal pada instalasi OSX 10.9.1 saya - Distribusi UNIX lainnya AKAN berbeda, tetapi apa yang disajikan di bawah ini harus bekerja pada sebagian besar jika tidak semua distribusi UNIX, tetapi gunakan distribusi UNIX lainnya. konvensi sebagai panduan untuk menyesuaikan di bawah ini untuk tujuan Anda sendiri:

.profil

# ~/.profile: executed by the command interpreter for login shells.

# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.  Note, however, that we will have a ~/.bash_profile and it
# will simply source this file as a matter of course.

# See /usr/share/doc/bash/examples/startup-files for examples.
# The files are located in the bash-doc package.

# From here on out, I basically set up my PATH, LD_LIBRARY_PATH, and anything else I'd like
# global to running programs and how those programs find their libraries.  This is shared by
# `cron`, so we really don't want interactive stuff, here.  Also, I setup my environments
# for brew, macports, and fink here, essentially with setting PATH, and invocation of those
# package initialization file as in:

# Brew and locally compiled stuff:
export PATH=/usr/local/bin:$PATH
export PATH=/usr/local/sbin:$PATH

# The following line puts gnu utilities without the prefix "g" in the path
# i.e. tar/gtar:
export PATH=$PATH:/usr/local/Cellar/coreutils/8.21/libexec/gnubin

# MacPorts shoves stuff in /opt, so to get at that stuff...
export PATH=/opt/local/bin:$PATH
export PATH=/opt/local/sbin:$PATH

# Set up for using Fink, which lives in /sw:
[ -e /sw/bin/init.sh ] && . /sw/bin/init.sh

# My stuff:
export PATH=~/perl:$PATH
export PATH=~/bin:$PATH
export PATH=.:$PATH

.bashrc

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

# From here on out, I put in things that are meaningful to interactive shells, like aliases,
# `shopt` invocations, HISTORY control, terminal characteristics, PROMPT, etc.

.bash_profile

# ~/.bash_profile: executed by the command interpreter for login shells.

# Because of this file's existence, neither ~/.bash_login nor ~/.profile
# will be sourced.

# See /usr/share/doc/bash/examples/startup-files for examples.
# The files are located in the bash-doc package.

# Because ~/.profile isn't invoked if this files exists,
# we must source ~/.profile to get its settings:
if [ -r ~/.profile ]; then . ~/.profile; fi

# The following sources ~/.bashrc in the interactive login case,
# because .bashrc isn't sourced for interactive login shells:
case "$-" in *i*) if [ -r ~/.bashrc ]; then . ~/.bashrc; fi;; esac

# I'm still trying to wrap my head about what to put here.  A suggestion
# would be to put all the `bash` prompt coloring sequence functions as
# described on http://brettterpstra.com/2009/11/17/my-new-favorite-bash-prompt/

Jadi itu dua sen saya. Perlu diingat bahwa contoh saya telah mencoba menunjukkan jalur kontrol melalui file startup dan menghindari apa yang mungkin diberlakukan oleh konvensi situs tertentu.


mengapa kita meletakkan semuanya di bash_profile di tempat pertama?

.profile awalnya digunakan oleh /bin/sh, menggunakan .profile memungkinkan kompatibilitas mundur.

Kecuali Anda menggunakan mac, semuanya tidak dimasukkan ke dalam bash_profile. Itu diletakkan di bashrc

bukankah lebih masuk akal dan lebih konsisten dengan komunitas linux untuk meletakkan semuanya di bashrc dan memiliki sumber bash_profile itu?

Adalah umum untuk memasukkan informasi sistem ke dalam shell yang dimuat saat Anda terhubung ke mesin (waktu aktif, paket perlu diperbarui, cpu temp dll...). Jika bashrc bersumber bash_profile, Anda akan melihat semua informasi itu setiap kali Anda membuka shell baru.

Di Unix:

.bash_profile dimuat oleh shell login
.bashrc dimuat oleh cangkang interaktif

Kecuali untuk Mac, yang memuat shell login untuk setiap terminal baru (interaktif atau tidak)

Sumber Daya Tambahan

perbedaan antara bashrc dan bash-profile

Di mana variabel lingkungan ditentukan


[...] Saya bingung mengapa lebih memilih bash_profile sebagai standar?

Siapa bilang itu standar? Manual Bash sendiri mengatakan tentang hal ini:

Jadi, biasanya, ~/.bash_profile Anda berisi baris

if [ -f ~/.bashrc ]; kemudian . ~/.bashrc; fi

setelah (atau sebelum) inisialisasi khusus login apa pun.


Linux
  1. Mengapa ~/.bash_profile Tidak Berfungsi?

  2. Grep – Mengapa Kurung Dalam Pola Grep Menghapus Proses Grep Dari Hasil Ps?

  3. Cara Menghentikan Kde Dari Menimpa Pengaturan Wm Lainnya?

  1. Mengapa saya beralih dari Mac ke Linux

  2. Migrasi server Linux dari baris perintah

  3. Memeriksa file DB Berkeley dari CLI

  1. Kisah Linux Saya:Mengapa orang mengenalkan Raspberry Pi

  2. Perbedaan Antara ~/.profile, ~/.bashrc, ~/.bash_profile, ~/.gnomerc, /etc/bash_bashrc, /etc/screenrc …?

  3. Izinkan Pengguna Lain Menyalin File Dari Folder?