通过 ssh 执行远程命令的默认 shell

通过 ssh 执行远程命令的默认 shell

我的 ubuntu 10.04 机器上有以下设置

~$ echo $SHELL
/bin/bash
~$ grep $USER /etc/passwd
ubuntu:x:1000:1000:Ubuntu,,,:/home/ubuntu:/bin/bash

但是,当我运行远程命令时,zsh 似乎是默认 shell:

$> ssh -i /path/to/ssh/key ubuntu@<my-host> "echo $SHELL"
/bin/zsh

我该如何解决?

答案1

您在那里看到的是本地登录 shell。

ssh user@host "echo $SHELL"

在上述情况下,$SHELL在运行 ssh 之前会进行扩展,因为它被括在双引号中。因此在远程端,您运行的是echo /bin/zsh而不是echo $SHELL

使用单引号避免$SHELL局部扩展。

ssh user@host 'echo "$SHELL"'

Bash常见问题 96了解更多信息。

答案2

您或其他人必须已使用 配置了您的远程主机zsh。要切换回 bash,请使用:

chsh -s /bin/bash

在您的远程主机上。

不过,顺便说一句,我会推荐zsh它,它是一款非常棒的 shell,具有许多非常有用的功能,启用它并不会阻止你使用 bash

#!/bin/sh 

仍将在 bash 下运行你的脚本。

答案3

阅读有关登录与非登录 shell 的信息。我怀疑您在、或中做了一些有趣的事情~/.bash_profile~/.bashrc因此~/.profile请检查它们的内容以查找可以执行此操作的内容。

相关内容