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


8

我正在使用大学的远程Linux帐户,可悲的是,默认外壳程序csh没有制表符完成。如何将帐户的默认外壳程序更改为bashchsh不可用。


1
大学使用什么系统存储帐户?ldapmodify可能有效。
user1686

或者,如果他们使用的是NIS,ypchsh则应使用正确的命令。
2012年

如果只想完成制表符,可以将它们添加到〜/ .cshrc set filec和中set autolist
Hennes

Answers:


11

您可能应该尝试询问系统管理员,他们是否可以为您更改默认外壳程序。如果他们不能或不可以(例如我上大学时的情况),我使用的解决方法是添加

# 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过程将变得毫无意义。


这对我的大学不起作用。我可能必须与sysadmin交谈。
2013年

3

您可以简单地与

ssh -t yourhost bash

登录时自动执行Bash Shell。


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

ssh -t yourhost exec bash

exec将运行一个新进程并退出旧csh进程,因此该进程将直接退出。

如果-l在命令末尾追加作为Bash的参数,它将被视为登录外壳,但这也许不是必需的。


1
ssh -t yourhost exec -a bash -l bash完全替换原始外壳,而不是在原始外壳中作为进程运行。
chepner 2012年

@chepner:有趣的是,ssh -t host bash在类似的情况下,我正在使用一个简单的解决方案,但是您的方法更好。我一点都没想过exec,谢谢!我会根据您的建议更新帖子。
丹尼尔·安德森

不过,我对bash内置命令使用了一些参数exec
chepner 2012年

@chepner:是的,我现在在以zsh作为默认shell的主机上尝试了该操作,并且在-a和上均失败-l。我将在答案中修改示例。
丹尼尔·安德森

0

我发现最好的解决方案是在stackexchange上解决问题。这是链接stackexchange,这是解决方案:

在您的主目录中创建一个.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

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.