題 如何在Ubuntu上將Bash作為默認shell?


我有一個 .bash_profile 在我的主目錄中,但它沒有登錄運行。如果我執行以下操作,那麼事情似乎就像我期望的那樣:

ssh myhost
bash
source ~/.bash_profile

但通常一切都發生在登錄。思考?


80
2017-09-25 12:03


起源


還要確保你沒有 ~/.profile 要么 ~/.bash_login,因為三個中只有一個來源。 (我忘了確切的順序。) - grawity
為什麼標題中有不同的問題,帖子正文中有不同的問題? - pabouk


答案:


使用:

chsh

輸入您的密碼並說明要使用的shell的路徑。

對於Bash來說 /bin/bash。 對於Zsh來說 /usr/bin/zsh


142
2017-09-25 12:08



+1 - 不確定為什麼OP決定編輯密碼文件是一個更好的選擇,但這是最好的答案 - kdgregory
是的打敗了我,這是標準的方式。 - John T
在ubuntu上你想要使用的shell的路徑是... / bin / bash(和/ bin / sh不一樣) - Harry Wood
或者你可以使用 sudo chsh -s /bin/bash username - Oleg Vaskevich
您必須註銷並重新登錄才能看到此更改。 - Neil Traft


除了akira的答案,您還可以編輯您的 / etc / passwd文件 用於指定默認shell的文件。

你會發現像這樣的例子:

john:x:1000:1000:john,,,:/home/john:/bin/sh

最後指定shell。


34
2017-09-25 12:09



最好使用akira建議的'chsh'命令 - 減少誤操作的機會。 - Lars Haugseth
當你不能寫入/ etc / passwd時,更不用說'chsh'了 - quack quixote
但是,如果您有權修改 /etc/passwd 而且你很小心,John的答案是充分利用系統提供的工具。 - AJP
您必須註銷並重新登錄才能看到此更改。 - Neil Traft
如果您正在運行沒有用戶密碼的服務器 - 僅通過公共/私有ssh密鑰提供訪問......這也很有意義。 chsh需要密碼。 - Keith John Hutchison


您可以查看終端程序。它可能被配置為運行/ bin / sh而不是/ bin / bash

Bash僅針對登錄會話執行.bash_profile。 .bashrc是針對所有bash會話執行的,而不僅僅是登錄會話。嘗試從.bashrc中獲取.bash_profile(避免循環依賴!)或將終端程序配置為運行/ bin / bash -l作為shell程序。


2
2017-09-25 12:14



終端程序與問題無關,因為它是遠程機器上的sshd,它產生新的shell。 - akira


另一種方法是將啟動腳本重命名為.profile。這個文件是大多數人的來源 Unix shell


2
2018-06-01 11:40





啟用bash:

$ /bin/bash

為用戶更改shell:

$ sudo usermod -s /bin/bash username

哪裡:

  -s, --shell SHELL             new login shell for the user account

0
2018-01-25 18:44



(1)“啟用bash”是什麼意思? (2)用戶想要改變 他自己 遠程系統上的登錄shell。你為什麼認為他有 sudo 訪問該系統?為什麼要提供更改其他用戶登錄shell的說明? - G-Man


我的問題中沒有足夠的信息讓我肯定地說,但我之前遇到過同樣的問題。假設您已經在密碼輸入中設置了/ bin / bash,這可能是您的終端啟動的方式。

如果您正在嘗試啟動GUI終端,請說 gnome-terminal 您可能希望shell讀取您的bash啟動文件。但是,默認情況下,這不會發生在Ubuntu和其他系統上。

我在Ubuntu上修復它的方法是編輯gnome-terminal首選項,並將啟動命令設置為 bash -l-l 是的縮寫 --login。這告訴bash啟動和登錄shell一樣,這會導致它在通過ssh登錄時加載啟動腳本。

我確信這是一個很好的理由,但我發現它令人驚訝,而且有點煩人,因為我在linux,cywgin和macos系統上共享相同的配置文件。


0
2017-09-15 19:37