.bash_profile
,但未在登录时运行。如果执行以下操作,则情况似乎与我预期的一样:ssh myhost
bash
source ~/.bash_profile
但是通常所有这些都在登录时发生。有想法吗?
#1 楼
使用:chsh
输入密码并声明要使用的shell的路径。
对于Bash来说是
/bin/bash
。 br />对于Zsh来说应该是/usr/bin/zsh
。评论
+1-不确定OP为何认为编辑密码文件是更好的选择,但这是最好的答案
–kdgregory
09-09-25 at 12:51
是的,击败了我,这是标准方式。
– John T
09-09-25 13:49
在ubuntu上,您要使用的shell路径是... / bin / bash(与/ bin / sh不同)
–哈里·伍德(Harry Wood)
2012年3月2日在1:01
或者您可以使用sudo chsh -s / bin / bash用户名
–奥列格(Oleg Vaskevich)
2014年1月21日,下午4:03
您必须注销并重新登录才能看到此更改。
–尼尔·特拉夫(Neil Traft)
14年7月6日在21:59
#2 楼
除了akira的答案之外,您还可以编辑/ etc / passwd文件以指定默认外壳程序。您会发现以下示例行:
john:x:1000:1000:john,,,:/home/john:/bin/sh
在最后指定外壳。
评论
最好使用akira建议的'chsh'命令-少将错误弄乱的机会。
–拉尔斯·豪格斯
09-09-25 13:17
更不用说'chsh'在您无法写入/ etc / passwd时可用
–嘎嘎吉x德
09年10月7日在11:30
但是,如果您可以修改/ etc / passwd并保持谨慎,John的答案就是充分利用系统提供的工具。
– AJP
2014年4月26日11:00
您必须注销并重新登录才能看到此更改。
–尼尔·特拉夫(Neil Traft)
2014年7月6日在22:01
如果您运行的服务器没有用户密码-仅通过公共/私有ssh密钥提供访问权限,那么这也很有意义。 chsh需要密码。
–基思·约翰·哈奇森(Keith John Hutchison)
2015-09-10 2:42
#3 楼
启用bash:$ /bin/bash
更改用户的shell:
$ sudo usermod -s /bin/bash username
其中:
-s, --shell SHELL new login shell for the user account
评论
(1)“启用bash”是什么意思? (2)用户想要在远程系统上更改自己的登录Shell。您为什么认为他在该系统上具有sudo访问权限?为什么要提供有关更改其他用户的登录shell的说明?
– G-Man说“恢复莫妮卡”
18年1月26日在3:24
使用chsh(如上所述)对我不起作用。这个命令做到了!
– Per Lindberg
19年2月12日在9:30
#4 楼
您可以检查终端程序。它可能配置为运行/ bin / sh而不是/ bin / bash。Bash仅对登录会话执行.bash_profile。 .bashrc对所有bash会话都执行,而不仅仅是登录会话。尝试从.bashrc采购.bash_profile(避免循环依赖!),或将终端程序配置为将/ bin / bash -l作为外壳程序运行。
评论
终端程序与该问题无关,因为它是远程计算机上的sshd,它产生了新的shell。
– akira
09-9-26 at 4:31
#5 楼
要将任何外壳设置为默认外壳,请先查看/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)
参考文献
https://linux.die.net/man/1/cat
https ://linux.die.net/man/1/whoami
https://linux.die.net/man/5/shells
https://linux.die.net/man/1 / chsh
#6 楼
一种选择是将启动脚本重命名为.profile。大多数Unix shell都提供此文件。#7 楼
如果您以某种方式在/ etc / passwd文件中看不到您的用户名[情况是当您的系统受其他域控制时,例如在IT公司中]或者使用
chsh
选项说“找不到用户”比下面的过程可能会帮助您。下面的技巧背后的逻辑->在Ubuntu上,/ bin / sh是短跑。您可以将系统切换为使用bash。在Ubuntu上,/ bin / sh是破折号的符号链接。您可以将其设置为bash的符号链接。要更改它,请运行
sudo dpkg-reconfigure dash
,然后按No切换到bash。
现在,转到“终端”->“编辑”->“首选项”->“命令”,然后选中带有语句
作为登录外壳运行命令的复选框
它。
#8 楼
您的问题中没有足够的信息可供我确定,但是我之前遇到过同样的问题。假设您已经在密码输入中设置了/ bin / bash,这可能是终端启动的方式。如果您要启动GUI终端,请说
gnome-terminal
shell来读取bash启动文件。但是,默认情况下在Ubuntu和其他系统上不会发生这种情况。我在Ubuntu上修复它的方法是编辑gnome-terminal首选项,并将启动命令设置为
bash -l
。 -l
是--login
的缩写。这告诉bash以登录shell身份启动,这导致它通过ssh登录时加载启动脚本,就像您通过ssh登录时一样。我相信这是一个很好的理由,但我发现它令人惊讶,而且令人烦恼,因为我在linux,cywgin和macos系统中共享相同的配置文件。
#9 楼
我遇到了同样的错误,上面的答案对我不起作用。由于某些原因,我的shell仍仅以/bin/sh
而不是/bin/bash
加载,并且我在.profile
中输入了命令,因为它应该在Ubuntu 16.04中运行,但是我还有一个空白的.bash_profile
文件,似乎是被.bashrc
读取而不是.profile
。因此,要使所有功能正常工作,我只需将需要启动的命令添加到我的
.bash_profile
文件中,然后所有内容都可以在下一个ssh上运行。所以我想说一下,如果您拥有所有三个文件:
.bashrc
, .bash_profile
,.profile
确保您的.bash_profile
文件中包含要在登录到shell环境时加载的内容。
评论
还要确保您没有〜/ .profile或〜/ .bash_login,因为只有这三个来源之一。 (我忘记了确切的顺序。)为什么标题中有不同的问题,而帖子正文中有不同的问题?