оболочка по умолчанию для удаленных команд через ssh

оболочка по умолчанию для удаленных команд через ssh

У меня на Ubuntu 10.04 установлены следующие настройки:

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

Однако при запуске удаленной команды zsh, похоже, является оболочкой по умолчанию:

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

Как это исправить?

решение1

То, что вы видите здесь, — это локальная оболочка входа.

ssh user@host "echo $SHELL"

С вышеизложенным, $SHELLраскрывается до запуска ssh, поскольку он заключен в двойные кавычки. Так что на удаленном конце вы запускаете echo /bin/zshвместо echo $SHELL.

Используйте одинарные кавычки, чтобы избежать $SHELLлокального расширения.

ssh user@host 'echo "$SHELL"'

ВидетьБашFAQ 96для получения более подробной информации об этом.

решение2

Вы или кто-то другой должен был настроить свой удаленный хост с помощью zsh. Чтобы переключиться обратно на bash, используйте:

chsh -s /bin/bash

на вашем удаленном хосте.

Хотя, в качестве отступления, я бы рекомендовал, zshчто это потрясающая оболочка с множеством очень полезных функций, и ее включение не помешает вам использовать bash.

#!/bin/sh 

по-прежнему будет запускать ваши скрипты под bash.

решение3

почитайте об оболочках входа и выхода из системы. Я подозреваю, что вы делаете что-то странное в ~/.bash_profile, ~/.bashrc, или ~/.profile, поэтому проверьте их содержимое на предмет чего-то, что могло бы это сделать.

Связанный контент