Yorumlanmasında bu akış
Bunu adam bashında buldum:
Bash etkileşimli bir giriş kabuğu veya --login seçeneğiyle etkileşimli olmayan bir kabuk olarak çağrıldığında, dosya varsa / etc / profilinden komutları okur ve yürütür.
Etkileşimli giriş kabuklarının okunduğunu belirtir /etc/profile
(--noprofile olmadan)
Ayrıca, okuma seçeneği ile etkileşimli olmayan kabuklar--login
/etc/profile
Yani bazı olası bırakmak gibi görünüyor giriş kabukları (hangi $0
bir ile başlar -
) olmak o etkileşimli olmayan (belki olarak basit gibi bir komut dosyasını çalıştırın date
) okumamış olabilir (kaynak) /etc/profile
.
Bu fikri onaylamak veya reddetmek için:
İlk olarak, ilk karakter olarak su -l -
bir giriş kabuğu ile başlayan bir giriş kabuğu kullanmaya çalıştım , -
ancak etkileşimli hale getiremiyorum (ve test etmek için testleri sunabiliyorum).
Gibi bir şey çağırmak
$ bash -c 'date' -bash
Bir giriş kabuğu olduğunu bildirmez (ilk karakter a olsa bile -
).
Ayrıntıları ortaya çıkarmak için bunu deneyin:
$ bash -c 'echo "$0 $- ||$(shopt -p login_shell)||";date' -bash -bash hBc ||shopt -u login_shell|| Fri Aug 19 06:32:31 EDT 2016
$0
Bir sahiptir-
ilk karakter olarak, hiçbir oradai
değerinde (interaktif)$-
ama bir olarak rapor edilmezlogin_shell
(-u). Bu durumda, / etc / profile okunmadı, ancak bunun doğru test olduğundan emin değilim.
Ayrıca, bu soru için yeterince spesifik olmadan bu cevapta "nadir etkileşimli olmayan giriş kabuklarından" bahsedilmektedir .
Bu adam sonuç olduğunu /etc/profile
hep okunur.
Özet tablosunu okuyun: hem etkileşimli hem de etkileşimli olmayan giriş kabukları okunur /etc/profile
Ve, bu sayfadaki örnekler doğruysa:
Some examples
$ su bob # interactive non-login shell
$ su - bob # interactive login shell
$ exec su - bob # interactive login shell
$ exec su - bob -c 'env' # non-interactive login shell
$ ssh bob@example.com # interactive login shell, `~/.profile`
$ ssh bob@example.com env # non-interactive non-login shell, `~/.bashrc`
Okunan exec su - bob -c 'env'
raporların testi /etc/profile
.
Kısacası:
Etkileşimli olmayan bir giriş kabuğuna sahip olmak mümkün mü (--login veya -l ile çağrılmaz)?
Ve eğer doğruysa, /etc/profile
dosyayı okuyor mu?
Yukarıdakiler doğruysa, TÜM giriş kabuklarının [etkileşimli (veya değil)] okuma / etc / profilini (seçeneksiz) sonucuna varmalıyız --noprofile
.
Not: / etc / profile öğesinin okunduğunu algılamak için dosyanın en başına şu komutu ekleyin:
echo "'/etc/profile' is being read"
--login
seçeneği kullanıyor . İkincisi için, eğerexec -a "-bash" "bash" <<<"shopt -p login_shell; echo $0 $-"
alırsam (C qoutes kodlanmış)$'/etc/profile read\nshopt -s login_shell\nbash himBH'
bu yüzden, bu giriş ama interaktif. Giriş yapmamız ve etkileşimli olmamamız gerekiyor . Kaçırdığım şey nedir?