![如果我无法访问 chsh 或 /etc/passwd,如何将我的默认 shell 更改为 bash?](https://linux22.com/image/1327713/%E5%A6%82%E6%9E%9C%E6%88%91%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%20chsh%20%E6%88%96%20%2Fetc%2Fpasswd%EF%BC%8C%E5%A6%82%E4%BD%95%E5%B0%86%E6%88%91%E7%9A%84%E9%BB%98%E8%AE%A4%20shell%20%E6%9B%B4%E6%94%B9%E4%B8%BA%20bash%EF%BC%9F.png)
我正在使用大学远程 Linux 帐户工作,遗憾的是默认 shellcsh
没有 tab 补全功能。我该如何将我的帐户的默认 shell 更改为bash
?chsh
不可用。
答案1
您可能应该尝试询问系统管理员是否可以为您更改默认 shell。如果他们不能或不愿意(就像我在大学时的情况一样),我使用的解决方法是添加
# Exec bash if using an interactive shell.
if ($?prompt) then
setenv SHELL /path/to/bash
exec $SHELL
endif
到。(当然,.cshrc
请确保用真实路径替换。如果系统提供的版本太旧,不符合您的口味,这甚至可以是位于您的主目录下的 版本。)为了提高效率,最好尽早在 中执行此操作,这样您就可以避免在替换该过程后变得毫无意义的额外处理。/path/to/bash
bash
.cshrc
.cshrc
bash
csh
答案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 文件中