臨海市城鄉(xiāng)建設(shè)規(guī)劃局網(wǎng)站廣州搜發(fā)網(wǎng)絡(luò)科技有限公司
1. 背景
在看shell變量的時(shí)候引起了興趣: 局部變量,全局變量,環(huán)境變量,shell的配置文件,參考博客:
http://c.biancheng.net/view/773.html
2. 交互式與非交互式
參考博客:
shell的兩個(gè)屬性:是否交互式(interactive), 是否登錄(login) - 知乎?
man bash:
通常的理解是:
?man手冊(cè)中給我們提供了怎么判斷交互與非交互的方法:
?所以我看看我自己的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 -命令的區(qū)別參考博客:?一分鐘知識(shí)點(diǎn):linux命令之su 和 su -?
可以用shopt login_shell的方法來看看shell是否設(shè)置了login_shell選項(xiàng),我看看我自己的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. 為什么要知道這兩種屬性?
因?yàn)樯婕暗絪hell配置方式的不同,繼續(xù)看man手冊(cè):
交互與登錄屬性一共有四種組合,我們只看三種:
登錄交互與登錄非交互: bash配置shell的順序是:
/etc/profile->~/.bash_profile->~/.bash_login->~/.profile->~/.bashrc
展開/etc/profile又可以看到登錄交互會(huì)去配置/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
非登錄交互時(shí): bash的配置順序是:
/etc/bash.bashrc->~/.bashrc
我們可以看到不論是/etc/bash.bashrc還是~/.bashrc,都要求是交互模式才行:
?
?5. 驗(yàn)證
登錄交互:?/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博客