如何在我的Ubuntu上将Bash设置为默认外壳?


101

.bash_profile我的主目录中有一个,但登录时未运行。如果执行以下操作,则情况似乎与预期的一样:

ssh myhost
bash
source ~/.bash_profile

但是通常所有这些都在登录时发生。有什么想法吗?


3
另外,请确保您没有~/.profile~/.bash_login,因为只有这三个来源之一。(我忘记了确切的顺序。)
grawity

3
为什么标题中有不同的问题,而帖子正文中有不同的问题?
pabouk

Answers:


170

采用:

chsh

输入您的密码并指出您要使用的外壳程序的路径。

对于Bash来说/bin/bash。对于Zsh来说应该是/usr/bin/zsh


15
+1-不知道为什么OP认为编辑密码文件是更好的选择,但这是最好的答案
kdgregory 2009年

1
是的,击败了我,这是标准方式。
约翰T

1
在ubuntu上,您要使用的shell路径是... / bin / bash(和/ bin / sh不相同)
哈里·伍德

49
或者您可以使用sudo chsh -s /bin/bash username
Oleg Vaskevich 2014年

7
您必须注销并重新登录才能看到此更改。
尼尔·特拉夫特

37

除了akira的答案之外,您还可以编辑/ etc / passwd文件以指定默认外壳程序。

您将找到类似于以下示例的行:

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

外壳在末尾指定。


8
最好使用akira建议的'chsh'命令-减少错误操作的机会。
Lars Haugseth 09年

5
更何况“CHSH”可当你不能写入/ etc / passwd文件
嘎嘎堂吉诃德

1
但是,如果您可以修改,/etc/passwd并且要小心,John的答案就是很好地利用系统提供的工具。
AJP 2014年

3
您必须注销并重新登录才能看到此更改。
尼尔·特拉夫特

2
如果您运行的服务器没有用户密码-仅通过公共/私有ssh密钥提供访问权限,那么这也很有意义。chsh需要密码。
基思·约翰·哈奇森

4

您可以检查终端程序。它可能配置为运行/ bin / sh而不是/ bin / bash

Bash仅对登录会话执行.bash_profile。.bashrc对所有bash会话都执行,而不仅仅是登录会话。尝试从.bashrc采购.bash_profile(避免循环依赖!),或将终端程序配置为将/ bin / bash -l作为shell程序运行。


2
终端程序与该问题无关,因为它是远程机器上的sshd,它产生了新的shell。
akira

2

一种选择是将启动脚本重命名为.profile。大多数Unix shell都可以得到该文件。


2

启用bash:

$ /bin/bash

更改用户的shell:

$ sudo usermod -s /bin/bash username

哪里:

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

2
(1)“启用bash”是什么意思?(2)用户想要在远程系统上更改自己的登录Shell。您为什么认为他可以sudo访问该系统?为什么要提供有关更改另一个用户的登录shell的说明?
G-Man

使用chsh(如上所述)对我不起作用。这个命令做到了!
Per Lindberg

1

要将任何shell设置为默认外壳,请首先查看以下内容,以验证其是否已在计算机上安装并被识别/etc/shells

$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/fish

然后使用chsh来更改您的外壳:

$ sudo chsh -s /usr/bin/bash $(whoami) # or sudo chsh -s /bin/bash $(whoami)

参考文献

  1. https://linux.die.net/man/1/cat
  2. https://linux.die.net/man/1/whoami
  3. https://linux.die.net/man/5/shells
  4. https://linux.die.net/man/1/chsh

0

您的问题中没有足够的信息可供我确定,但是我之前遇到过同样的问题。假设您已经在密码输入中设置了/ bin / bash,这可能是终端启动的方式。

如果您要启动GUI终端,请说gnome-terminal您可能希望Shell读取bash启动文件。但是,默认情况下,这在Ubuntu和其他系统上不会发生。

我在Ubuntu上修复它的方法是编辑gnome-terminal首选项,并将启动命令设置为bash -l-l是的缩写--login。这告诉bash作为登录外壳程序启动,这导致它通过ssh登录时加载您启动时的启动脚本。

我敢肯定,这样做是有道理的,但是我发现它令人惊讶,而且令人烦恼,因为我在linux,cywgin和macos系统中共享相同的配置文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.