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

ssh myhost
bash
source ~/.bash_profile


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

评论

还要确保您没有〜/ .profile或〜/ .bash_login,因为只有这三个来源之一。 (我忘记了确切的顺序。)

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

#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环境时加载的内容。