我正在使用Ubuntu 16.04。在我的$HOME/.profile
中,它有
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
每次登录时,它都不会到达第一个IF
。
测试文件显示:
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
我回显了$ BASH_VERSION,它显示4.3.46(1)-release
。因此,如果if [ -n "$BASH_VERSION" ]
用于检查该变量是否存在,(显然是),为什么它甚至没有达到第一个IF?
从结果看,直到我第一次调用终端应用程序时才会生成$ BASH_VERSION。
由于.profile中的IF语句是原始的,我不明白你登录时是否没有生成$ BASH_VERSION,最初有这些语句的目的是什么。
由于
答案 0 :(得分:0)
(评论过得太长了:))
请参阅Ask Ubuntu上的this question。 .profile
可能在sh
下运行,而不是bash
,因此BASH_VERSION
中未设置.profile
。
要测试此功能,请添加
ps >> /tmp/testtmp.txt
到.profile
。您将看到正在运行的shell的进程名称,可能是每this个破折号。
要查看您的默认外壳grep <whatever your username is> /etc/passwd
- 您会看到/bin/<whatever>sh
。
如果确实/bin/bash
未设置为默认shell,则可以更改它(按this answer):
sudo chsh -s /bin/bash <whatever your username is>