關於登陸shell和非登陸shell的區別

2021-06-08 13:14:50 字數 2454 閱讀 7741

問題描述:

實驗室有一台用於linux教學用的機器,為每乙個學生在上面建了乙個使用者,作為上課用的。而我呢,正在做vlsi實驗。因為那台機器持久開著,所以我為了方便就在上面也建了乙個使用者,用於vlsi實驗。

cadence環境是在csh下的。但是管理員給我建的使用者預設的是bash環境,我又沒有超級使用者密碼,也不想麻煩管理員。於是我就想了個辦法。修改.bashrc檔案增加一行/bin/csh。讓自啟動乙個csh,就可以啦。

問題解決:

剛才把問題搞明白啦,原來我在.bashrc檔案中還加上了這麼一句export shell=/bin/csh。這樣的話我圖形介面登陸後,系統的shell環境變數就已經被設定成啦/bin/csh,因此你啟動乙個終端shell時都會預設進入csh環境。怪不得ps出來只有csh呢。這樣我吧export shell=/bin/csh。再重新登陸到圖形介面,開啟乙個終端shell,ps就會顯示出bash建立了csh。

問題描述:

還遇到乙個問題。csh沒有命令自動補齊,只要環境設定好,我就可以回到bash下啦。於是我就想在.cshrc檔案中加入一行exit。但是好像並不執行exit。這是為什麼呢?沒有找到問題的答案。

通過解決這些問題,順便了解一下登陸shell和非登陸shell的區別【摘】

家目錄下的配置檔案.bashrc中rc的含義是resource configuration

什麼是登陸shell?什麼是非登陸shell?

登陸shell是指:(1)使用者登陸時,輸入使用者名稱和密碼後啟動的shell;(2)通過帶--login引數的命令:bash --login而啟動的shell。對於使用者來說,登陸shell和非登陸shell的主要區別是:啟動shell時所執行的startup檔案不同。我在/etc/profile、~/.bash_profile、~/.bashrc三個檔案中分別通過echo命令列印出檔名。執行命令如下所示:

wangjk@wangjiankun:~$ bash 

.bashrc 

wangjk@wangjiankun:~$ bash --login 

etc/profile 

.bash_profile 

.bashrc 

wangjk@wangjiankun:~$

上面的結果說明:登陸shell執行startup檔案為:/etc/profile、~/.bash_profile、~/.bashrc(這裡只是從現象上得出的推論,這種推論是有問題的,稍後討論),而非登陸shell執行的startup檔案僅為:~/.bashrc。

bash作為登陸shell是由/etc/login程式解析/etc/passwd檔案而指定的,例如:wangjk:x:1000:1000:wangjiankun,,,:/home/wangjk:/bin/bash,其中紅色域指定了使用者的登入shell是bash。

事實上,bash作為登陸shell啟動時執行的startup檔案如下:

/etc/profile 

~/.bash_profile,~/.bash_login or ~/.profile, first existing readable file is read 

而bash作為非登陸shell啟動時讀取~/.bashrc。注意,作為登陸shell時bash並不讀取~/.bashrc,但是在檔案~/.bash_profile中通常都有如下語句來讀取~/.bashrc:

if [ –f  ~/.bashrc ]; then . ~/.bashrc; fi

以上討論的是互動式bash shell,其實shell有兩種工作模式,就是:互動式和非互動式,執行指令碼時,shell就工作在非互動式模式下。在非互動模式下,bash讀取的startup檔案由環境變數bash_env來決定,例如,我在~/.test檔案中用echo命令列印語句:i test non-interactive shell,在test.sh指令碼中列印語句:this file is test.sh,執行輸出結果如下:

wangjk@wangjiankun:~$

wangjk@wangjiankun:~$ echo $bash_env

wangjk@wangjiankun:~$ ./test.sh                                             

this file is test.sh 

wangjk@wangjiankun:~$ export bash_env=~/.test 

wangjk@wangjiankun:~$ ./test.sh                                             

i test non-interactive shell 

this file is test.sh 

wangjk@wangjiankun:~$

注意,中間的那個空行表示環境變數bash_env為空,所以第一次執行指令碼test.sh時只輸出了一句話,在定義了環境變數bash_env為~/.test以後執行指令碼test.sh就列印了兩句話其中第一句是執行檔案~/.test列印出來的。

登陸mysql s MySQL登陸退出

單例項登陸mysql mysql mysql uroot 適合剛安裝後無密碼 mysql uroot p 標準登陸的方法 mysql uroot p password 密碼明文會洩露密碼,一般用於指令碼中,指令碼許可權root 700 多例項登陸mysql mysql s data 3307 mys...

關於HttpClient登陸

使用httpclient進行登入,網上找 很多,但真實性。可靠性卻並不高。找到乙個登陸開心網的,很明顯把cookie用錯了,在網上貼個 是那麼重要的事情嘛,而且同乙份 到處都是,是原創都分辨不了,如果是好的,有用的,還罷,如果不是,那意義何在呢,招人罵嗎?因工作需要,要從別的系統抓資料,經過學習,選...

ubuntu root 使用者登陸登陸辦法

習慣於圖形化操作的我們,不愛面對一堆的命令的操作,拿想要隨意操作所有東東,就想要提示登入的許可權 以root使用者登入就可以。但是,ubuntu預設並沒有以root使用者登入,so,我們需要做些配置,讓系統再啟動的時候直接以root使用者登入。ubuntu 12.04預設是不允許root登入的,在登...