Проблемы с scp, если я использую bashrc для открытия рыбы, если она присутствует

Ситуация: необходимо подключиться к нескольким удаленным серверам, причем некоторые из них имеют ракушку

Требование: оболочка по умолчанию – bash. Если я вхожу на сервер и рыба присутствует, переключитесь на рыбную оболочку, иначе оставайтесь на bash.

Пробовал .bashrc:

# .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # Source global definitions if [ -f /etc/bash.bashrc ]; then . /etc/bash.bashrc fi # Update Path export PATH=/sbin:/usr/sbin:/usr/local/sbin:$PATH:$HOME/.bin # Open fish shell if present, otherwise stick to bash if hash fish 2>/dev/null; then # echo "Fish detected, shifting shell" fish "$@"; exit fi 

Однако scp, похоже, не работает. Когда я пытаюсь скопировать файл, подробный вывод показывает, что он застрял здесь.

 debug1: Authentication succeeded (publickey). debug1: channel 0: new [client-session] debug1: Requesting no-more-sessions@openssh.com debug1: Entering interactive session. debug1: pledge: network debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0 debug1: Sending environment. debug1: Sending env LANG = en_US.UTF-8 debug1: Sending env LC_ADDRESS = en_US.UTF-8 debug1: Sending env LC_IDENTIFICATION = en_US.UTF-8 debug1: Sending env LC_MEASUREMENT = en_US.UTF-8 debug1: Sending env LC_MONETARY = en_US.UTF-8 debug1: Sending env LC_NAME = en_US.UTF-8 debug1: Sending env LC_NUMERIC = en_US.UTF-8 debug1: Sending env LC_PAPER = en_US.UTF-8 debug1: Sending env LC_TELEPHONE = en_US.UTF-8 debug1: Sending env LC_TIME = en_US.UTF-8 debug1: Sending command: scp -v -f test_file 

Первоначально я думал, что команда echo заставляла его не работать, но он не работает и без него.

Требование. Нужна помощь в выяснении того, что не так с моим подходом, и / или если есть лучший способ достичь упомянутого выше требования.

One Solution collect form web for “Проблемы с scp, если я использую bashrc для открытия рыбы, если она присутствует”

Чтобы выйти из файла bashrc когда сеанс оболочки, который является источником ресурсов, не является интерактивным, вы можете сделать следующее в верхней части (или в удобном месте) файла:

 case "$-" in *i*) ;; *) return ;; esac 

Значение в $- представляет собой строку букв, обозначающую текущие установленные параметры оболочки. Если символ i присутствует в строке, оболочка является интерактивной.

Это может потребоваться, поскольку, как отметил Тердон в комментариях, Bash рассматривает сеансы оболочки, которые запускаются sshd , демоном SSH, в качестве специального случая.

Подробности: Почему bashrc проверяет, является ли текущая оболочка интерактивной?

Далее в файле вы можете проверить, доступен ли снайпер для fish и начать это:

 if command -v fish 2>/dev/null; then exec fish fi 

Имейте в виду, что fish может быть игрой «Go Fish» на некоторых системах 🙂

Об использовании command -v : Почему бы не использовать «что»? Что использовать тогда?

  • Как передать удаленный файл в stdout через scp или sftp?
  • Скопировать каталог с помощью SCP
  • Команда scp, работающая в bash, не работает в zsh
  • Сценарий для копирования файла на удаленный хост и его переименования
  • Запустить команду после завершения команды nice
  • scp на локальную машину после SSHing
  • scp и сжимать одновременно, без промежуточного сохранения
  • Передача `scp` закрывается, когда я закрываю оболочку?
  • пароль выходит из строя через ssh, работает локально
  • Параметры MaxStartups и MaxSessions для ssh-соединений?
  • как scp в mc (и помните)?
  • Interesting Posts

    Как получить более точную информацию о завершении работы программы?

    Установка Gentoo: не удается найти корневое устройство (загрузка LiveCD с HardDrive)

    Вино: не проверяйте установку Mono

    «Df -h» и «fdisk -l» на сервере amazon

    Как сделать ls, предупреждающий меня о родительском каталоге, является symlink

    Вывод трубы из одной команды в нестандартный ввод другой команды

    распечатать, если следующая строка содержит

    Осмотреть создание PATH в osx, чтобы найти сломанный путь в PATH

    «Недопустимый ключ MIT-MAGIC-COOKIE-1» при попытке запуска программы удаленно

    Нет звука – Debian 8

    Выполнить такую ​​же операцию для нескольких пар файлов с похожими именами

    Корица (Петра) разбилась. Открывается в резервном режиме

    Почему мой unmounted USB-диск все еще отображается с помощью `fdisk`?

    С полным журналированием данных, почему данные появляются в каталоге немедленно?

    Как обновить PHP на CentOS 6.7 для CiviCRM 4.7 / WordPress?

    Linux и Unix - лучшая ОС в мире.