如果我无法访问 chsh 或 /etc/passwd,如何将我的默认 shell 更改为 bash?

如果我无法访问 chsh 或 /etc/passwd,如何将我的默认 shell 更改为 bash?

我正在使用大学远程 Linux 帐户工作,遗憾的是默认 shellcsh没有 tab 补全功能。我该如何将我的帐户的默认 shell 更改为bashchsh不可用。

答案1

您可能应该尝试询问系统管理员是否可以为您更改默认 shell。如果他们不能或不愿意(就像我在大学时的情况一样),我使用的解决方法是添加

# Exec bash if using an interactive shell.
if ($?prompt) then
    setenv SHELL /path/to/bash
    exec $SHELL
endif

到。(当然,.cshrc请确保用真实路径替换。如果系统提供的版本太旧,不符合您的口味,这甚至可以是位于您的主目录下的 版本。)为了提高效率,最好尽早在 中执行此操作,这样您就可以避免在替换该过程后变得毫无意义的额外处理。/path/to/bashbash.cshrc.cshrcbashcsh

答案2

您可以直接连接

ssh -t yourhost bash

当您登录时自动执行 Bash shell。


从下面的评论中你可以看到替代方案

ssh -t yourhost exec bash

exec会运行一个新进程,并退出旧进程,所以csh进程会直接退出。

如果将其-l作为参数附加到命令末尾,它将被视为登录 shell,但也许没有必要。

答案3

我在 stackexchange 上找到了一个最佳解决方案。以下是链接stackchange解决方案如下:

在您的主目录中创建一个 .profile 文件并粘贴以下内容,或者如果您已经有一个 .profile 文件,则将其添加到 .profile 的末尾。

case $- in
  *i*)
    # Interactive session. Try switching to bash.
    if [ -z "$BASH" ]; then # do nothing if running under bash already
      bash=$(command -v bash)
      if [ -x "$bash" ]; then
        export SHELL="$bash"
        exec "$bash"
      fi
    fi
esac

答案4

当您通过 PAM 使用 LADP 身份验证时,我进行了很多搜索,我认为最好的解决方案是将 SHELL=/bin/bash exec /bin/bash 放在用户主目录中的 .profile 文件中

相关内容