2017-01-14 2 views
1

Ich benutze Ubuntu 16.04. In meinem $HOME/.profile hat es.profile hat Anweisungen, um .bashrc aufzurufen, aber .bashrc nicht ausgeführt

echo `date` ':.profile executed starts' >> /tmp/testtmp.txt 
echo $BASH_VERSION >> /tmp/testtmp.txt 
if [ -n "$BASH_VERSION" ]; then 
echo 'if 1 entered' >> /tmp/testtmp.txt 
    # include .bashrc if it exists 
    if [ -f "$HOME/.bashrc" ]; then 
    echo 'if 2 entered' >> /tmp/testtmp.txt 
    . "$HOME/.bashrc" 
    fi 
else 
    echo 'if 1 not entered' >> /tmp/testtmp.txt 
fi 

Jedes Mal, wenn ich anmelden, es erreicht nicht einmal die erste IF.

Die Testdatei zeigt:

Sat Jan 14 05:15:57 EST 2017 :.profile executed starts 

if 1 not entered 
Sat Jan 14 05:15:57 EST 2017 :.profile executed ends 

ich BASH_VERSION $ hallte, zeigt es 4.3.46(1)-release. Wenn also if [ -n "$BASH_VERSION" ] überprüft werden soll, ob diese Variable existiert (anscheinend ja), warum erreicht sie nicht einmal die erste IF?

Aus dem Ergebnis sieht es aus wie $ BASH_VERSION wird nicht generiert, bis ich die Terminal-Anwendung zum ersten Mal aufgerufen habe.

Da diese IF-Anweisungen in .profile original sind, verstehe ich nicht, wenn $ BASH_VERSION nicht generiert wird, wenn Sie sich anmelden, was ist der Zweck, diese Anweisungen ursprünglich zu haben.

Dank

+0

Woher weißt du es nie die erste 'if' Anweisung erreicht? Ist es auch '.profile' oder' .bashrc', die nicht ausgeführt werden? Dein Titel sagt einen, aber der Körper sagt den anderen. –

+0

Wie haben Sie die Datei .profile aufgerufen? Mit 'source ~/.profile'? Auch wo hast du die $ BASH_VERSION –

+0

Entschuldigung Jungs. Ich habe meine Frage aktualisiert. –

Antwort

0

(Dies war schon zu lange als Kommentar :))

Siehe this question auf Ubuntu Frage. .profile läuft wahrscheinlich unter sh, nicht bash, daher wird BASH_VERSION nicht in .profile festgelegt.

Um dies zu testen, fügen

ps >> /tmp/testtmp.txt 

zu Ihrem .profile. Sie sehen den Prozessnamen der Shell, unter der Sie arbeiten, die ein Strich pro this sein kann.

Um zu sehen, was Ihre Standard-Shell ist, grep <whatever your username is> /etc/passwd - Sie sehen /bin/<whatever>sh.

Wenn in der Tat /bin/bash nicht als Standard-Shell setzen, können Sie es ändern (pro this answer):

sudo chsh -s /bin/bash <whatever your username is> 
+0

Danke. Hier ist mein Testergebnis. 1. meine Benutzer-ID in '/ etc/passwd' sagt, dass sie'/bin/bash' verwendet 2. 'ps >>/tmp/testtmp.txt' zeigt mir nichts, was mit sh oder bash zusammenhängt. –

+0

Ich habe diesen Beitrag auf askubuntu gelesen. In seinem Fall, durch chsh login shell von sh zu bash, löste es sein Problem. Aber da meine Login-Shell schon Bash ist, weiß ich nicht, was ich sonst noch machen kann. –

+0

I hardcoded läuft .bashrc in .profile.Genau wie die Post in Askubuntu. Es kann bash-Anweisungen in .bashrc nicht analysieren. –