İki farklı sistemde yeni bir Oneiric yüklemesi (yani yükseltme değil) çalıştırıyorum ve görünüşte ilgili sorunlar kümesine koşuyorum.
Grubun en sinir bozucu yanı, Mac OS X'ten benimle taşıdığım .profile ve .bashrc'yi kullandığımda, LightDM aracılığıyla X'e giriş yapmak derhal oturumumu kapatıyor. Bunun, "/ bin / sh" çalıştırırken, / bin / dash olarak davrandığına, ancak yine de $ SHELL değişkeninin / bin / bash olarak ayarlanmış olmasından kaynaklandığına inanıyorum.
ekstrapolasyon
Çok kocam var .bashrc
. İsterseniz burada görebilirsiniz , ancak içeriği bashisms ile dolu olması ve xterm içinde veya sanal bir konsolda hatasız çalışmasının yanı sıra muhtemelen ilgili değildir.
Benim .profile
şöyle görünüyor (kısaltılmış):
case $SHELL in
*bash*)
if [ -f $HOME/.bashrc -a -r $HOME/.bashrc ]; then
. $HOME/.bashrc
fi
;;
esac
X'e LightDM üzerinden giriş yapmaya çalışırsam, hemen oturumumu kapatır. .xsession-errors
Bu (kısaltılmış) gibi görünen benim .bashrc ile ilgili hatalar alıyorum:
/home/mrled/.bashrc: 103: [[: not found
[: 103: Linux: unexpected operator
[: 274: -P :: unexpected operator
/home/mrled/.bashrc: 520: complete: not found
Dediğim gibi, bash'ı sanal bir konsoldan çalıştırdığımda, bu hataları almıyorum. Ayrıca, .profile'ımı kaldırırsam, X'e iyi giriş yapabilirim. (Ayrıca sanal bir konsola giriş yapabilir ve startx
çalışan bir X oturumu başlatmak için kullanabilirim , ancak bu elbette uzun vadeli bir çözüm değil.)
Ancak, ben çalıştırırsanız keşfetti /bin/sh -l
, ben do hataları olsun. İşte bir örnek oturum (not: basitleştirdiğim bash istemi bash>
ve sh istemi sadece $
):
bash> echo $SHELL
/bin/bash
bash> echo $BASH_VERSION
4.2.10(1)-release
bash> /bin/sh -l
/home/mrled/.bashrc: 103: [[: not found
[: 103: Linux: unexpected operator
[: 274: -P :: unexpected operator
/home/mrled/.bashrc: 520: complete: not found
$ echo $SHELL
/bin/bash
$ echo $BASH_VERSION
$
S1: Bu neden oluyor?
/ Bin / sh'ın şimdi bash yerine tire işaret ettiğini anlıyorum , ancak bu doğruysa, neden $SHELL
hala geri dönüyor /bin/bash
?
S2: Etrafında çalışmak için ne yapabilirim?
Bu sorunu çözmek için bir yol var mı? Hem giriş hem de giriş olmayan kabuklarda aynı ortamı elde etmek için profilimi .bashrc yüklemeye devam etmek istiyorum, ancak açıkçası sadece bash için değil, bash için masquerading değil, bash için yüklenmesini istiyorum.
Yukarıdaki $ BASH_VERSION değişkeninin içeriğindeki farkı fark etmiş olabilirsiniz. Benim .profile böyle bir şey sarma denedim:
if [ -n $BASH_VERSION ]; then
# the rest of my .profile as above
fi
-n
Dize uzunluğu sıfırdan yalnızca altında koşuyorum zaman testi, yukarıda oturumda olsa bile, ancak, gerçek dönmelidir /bin/sh -l
buna böyle benim .profile dahildir? $ BASH_VERSION için boş bir dize döndürür , testi geçer! Onlar benim .bashrc kaynak ve bana önceki gibi aynı hataları vermek için ilerler.
Şimdi gerçekten kafam karıştı.
$SHELL
/etc/passwd
(veya getent passwd
) içindeki son alan ne derse desin.
~/.profile
, bash'a özgü şeyleri içine koymalı ~/.bashrc
ve her ~/.bash_profile
ikisine de kaynak sağlamalısınız .
dash -l
da gösterir .$SHELL
/bin/bash