BASH 和/或 .BASHRC 在 SU 或 SSH 登录后无法正常工作,除非运行“bash”命令

Posted

技术标签:

【中文标题】BASH 和/或 .BASHRC 在 SU 或 SSH 登录后无法正常工作,除非运行“bash”命令【英文标题】:BASH and/or .BASHRC not working properly after SU or SSH login unless run "bash" command 【发布时间】:2012-01-26 07:22:00 【问题描述】:

我有一台运行 Ubuntu 10.04 的 Amazon EC2 机器。

默认用户 ubuntu 的 .bashrc 似乎表现正常,但如果我将 sshsu 发送给第二个用户 mikey,它在运行 bash 之前无法正常显示:

Ex 1.) 使用su 更改用户

mikey@home ~$ ssh ubuntu@EC2
ubuntu@EC2:~$
ubuntu@EC2:~$ su mikey
$ 
$ bash
mikey@EC2: $

Ex 2.) 直接以用户身份登录 SSH

mikey@home ~$ ssh mikey@EC2
/home/mikey/.bashrc: 13: shopt: not found
/home/mikey/.bashrc: 21: shopt: not found
/home/mikey/.bashrc: 99: shopt: not found
/etc/bash_completion: 33: [[: not found
/etc/bash_completion: 39: [[: not found
/etc/bash_completion: 52: Bad substitution
\[\e]0;\u@\h: \w\a\]\u@\h:\w$
\[\e]0;\u@\h: \w\a\]\u@\h:\w$ bash
mikey@EC2:~$

我尝试过使用~/.profile~/.bash_login 来包含

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

但到目前为止,似乎没有任何效果。

任何指针将不胜感激。谢谢!

【问题讨论】:

你能在非工作的 shell 中 echo $SHELL 吗?它可能不是bash 谢谢,您说的完全正确。 [\e]0;\u@\h: \w\a]\u@\h:\w$ echo $SHELL /bin/sh 现在谷歌搜索看看如何改变它,但任何指针都将不胜感激。 :) 下面是一个使用usermod的例子。 你就是那个男人。编辑 /etc/passwd 以将 mikey 用户指向 /bin/bash 似乎可以解决问题。 【参考方案1】:

如果实际上你的 shell 不是bash,你可以尝试像这样改变它:

usermod -s /bin/bash mikey

如果 /bin/bash 是该系统上bash 的位置。

【讨论】:

【参考方案2】:

我认为您的默认 shell 是 dashsh 而不是 bash 在这种情况下。 echo $SHELL 应该显示它,如果它显示 /bin/sh,它可能是一个链接,因此请检查 ls -l /bin/sh 是否链接到其他 shell。

【讨论】:

【参考方案3】:

你不能用chsh来换壳吗?而不是破解 /etc/passwd?

【讨论】:

【参考方案4】:

要永久修复此问题,请更改 /etc/passwd

发件人:

kwilson:x:3042:3042::/home/jjson:/bin/sh

改成:

kwilson:x:3042:3042::/home/jjson:/bin/bash

【讨论】:

你应该使用 chshusemod 来做这个。

以上是关于BASH 和/或 .BASHRC 在 SU 或 SSH 登录后无法正常工作,除非运行“bash”命令的主要内容,如果未能解决你的问题,请参考以下文章

VSCode 集成终端不加载 .bashrc 或 .bash_profile

OpenSuse linux 上的 .bashrc 或 .bash_profile 在哪里?

Julia和Bash - Julia的shell模式不执行〜/ .bash_profile(或〜/ .bashrc)

sh 一个bash函数添加到〜/ .bash_profile(或〜/ .bashrc或其他)

VScode 终端似乎没有在 Windows 上加载 .bashrc 或 .bash_profile

centos bash.bashrc空白了怎么办