1. 背景
在看shell變量的時候引起了興趣: 局部變量,全局變量,環境變量,shell的配置文件,參考博客:
http://c.biancheng.net/view/773.html
2. 交互式與非交互式
參考博客:
shell的兩個屬性:是否交互式(interactive), 是否登錄(login) - 知乎?
man bash:
通常的理解是:
?man手冊中給我們提供了怎么判斷交互與非交互的方法:
?所以我看看我自己的shell是否是交互式的:
liaojunwu@liaojunwu-virtual-machine:~$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
liaojunwu@liaojunwu-virtual-machine:~$
liaojunwu@liaojunwu-virtual-machine:~$ echo $-
himBH
liaojunwu@liaojunwu-virtual-machine:~$
?3. 登錄與非登陸
man bash:
通常的理解是:
?su和su -命令的區別參考博客:?一分鐘知識點:linux命令之su 和 su -?
可以用shopt login_shell的方法來看看shell是否設置了login_shell選項,我看看我自己的shell:
liaojunwu@liaojunwu-virtual-machine:~$ shopt login_shell
login_shell off
liaojunwu@liaojunwu-virtual-machine:~$
liaojunwu@liaojunwu-virtual-machine:~$ su - liaojunwu --login
密碼:
liaojunwu@liaojunwu-virtual-machine:~$
liaojunwu@liaojunwu-virtual-machine:~$
liaojunwu@liaojunwu-virtual-machine:~$ shopt login_shell
login_shell on
liaojunwu@liaojunwu-virtual-machine:~$
?4. 為什么要知道這兩種屬性?
因為涉及到shell配置方式的不同,繼續看man手冊:
交互與登錄屬性一共有四種組合,我們只看三種:
登錄交互與登錄非交互: bash配置shell的順序是:
/etc/profile->~/.bash_profile->~/.bash_login->~/.profile->~/.bashrc
展開/etc/profile又可以看到登錄交互會去配置/etc/bash.bashrc
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).if [ "$PS1" ]; thenif [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then# The file bash.bashrc already sets the default PS1.# PS1='\h:\w\$ 'if [ -f /etc/bash.bashrc ]; then. /etc/bash.bashrcfielseif [ "`id -u`" -eq 0 ]; thenPS1='# 'elsePS1='$ 'fifi
fiif [ -d /etc/profile.d ]; thenfor i in /etc/profile.d/*.sh; doif [ -r $i ]; then. $ifidoneunset i
fiexport PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
非登錄交互時: bash的配置順序是:
/etc/bash.bashrc->~/.bashrc
我們可以看到不論是/etc/bash.bashrc還是~/.bashrc,都要求是交互模式才行:
?
?5. 驗證
登錄交互:?/etc/profile->/etc/bash.bashrc->~/.bash_profile->~/.bash_login->~/.profile->~/.bashrc
liaojunwu@liaojunwu-virtual-machine:~$
liaojunwu@liaojunwu-virtual-machine:~$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
liaojunwu@liaojunwu-virtual-machine:~$
liaojunwu@liaojunwu-virtual-machine:~$
liaojunwu@liaojunwu-virtual-machine:~$
liaojunwu@liaojunwu-virtual-machine:~$ shopt login_shell
login_shell on
liaojunwu@liaojunwu-virtual-machine:~$
liaojunwu@liaojunwu-virtual-machine:~$
liaojunwu@liaojunwu-virtual-machine:~$ logout
liaojunwu@liaojunwu-virtual-machine:~$ exit
注銷
liaojunwu@liaojunwu-virtual-machine:~$ exit
注銷
liaojunwu@liaojunwu-virtual-machine:~$ exit
注銷
liaojunwu@liaojunwu-virtual-machine:~$ su - root
密碼:
[DEBUG]in /etc/profile!
[DEBUG]in /etc/bash.bashrc!
root@liaojunwu-virtual-machine:~#
root@liaojunwu-virtual-machine:~#
root@liaojunwu-virtual-machine:~# su - liaojunwu --login
[DEBUG]in /etc/profile!
[DEBUG]in /etc/bash.bashrc!
[DEBUG]in ~./profile!
[DEBUG]in ~./bashrc !
liaojunwu@liaojunwu-virtual-machine:~$
非登錄交互:?/etc/bash.bashrc->~/.bashrc
[DEBUG]in /etc/bash.bashrc!
[DEBUG]in ~./bashrc !
liaojunwu@liaojunwu-virtual-machine:~$ echo $-
himBH
liaojunwu@liaojunwu-virtual-machine:~$ shopt login_shell
login_shell off
liaojunwu@liaojunwu-virtual-machine:~$
liaojunwu@liaojunwu-virtual-machine:~$
liaojunwu@liaojunwu-virtual-machine:~$
liaojunwu@liaojunwu-virtual-machine:~$
liaojunwu@liaojunwu-virtual-machine:~$ bash -i
[DEBUG]in /etc/bash.bashrc!
[DEBUG]in ~./bashrc !
liaojunwu@liaojunwu-virtual-machine:~$
6. PS1變量
參考博客:?bash下變量PS1的完整理解_ps1變量_whowin的博客-CSDN博客