通过 ssh 远程命令的默认 shell

Rag*_*ram 7 ssh remote-access

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

~$ echo $SHELL
/bin/bash
~$ grep $USER /etc/passwd
ubuntu:x:1000:1000:Ubuntu,,,:/home/ubuntu:/bin/bash
Run Code Online (Sandbox Code Playgroud)

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

$> ssh -i /path/to/ssh/key ubuntu@<my-host> "echo $SHELL"
/bin/zsh
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

gei*_*rha 8

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

ssh user@host "echo $SHELL"
Run Code Online (Sandbox Code Playgroud)

上面的,$SHELL在运行 ssh 之前被扩展,因为它用双引号括起来。因此,在远程端,您正在运行echo /bin/zsh而不是echo $SHELL.

使用单引号避免$SHELL在本地展开。

ssh user@host 'echo "$SHELL"'
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅BashFAQ 96


小智 1

您或其他人必须已使用zsh. 要切换回 bash,请使用:

chsh -s /bin/bash
Run Code Online (Sandbox Code Playgroud)

在您的远程主机上。

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

#!/bin/sh 
Run Code Online (Sandbox Code Playgroud)

仍然会在 bash 下运行你的脚本。


nat*_*ill 0

阅读有关登录与非登录 shell 的内容。我怀疑你在~/.bash_profile~/.bashrc、 或中做了一些有趣的事情~/.profile,所以检查它们的内容是否有可以做到这一点的东西。