2016-10-21 2 views
0

Capistrano Док говоритInteractive Shell с Миной и Capistrano

http://capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/#

ssh [email protected] "[[ $- == *i* ]] && echo 'Interactive' || echo 'Not interactive'" 
Interactive 
[email protected] $ ssh [email protected] "shopt -q login_shell && echo 'Login shell' || echo 'Not login shell'" 
Not login shell 

Capistrano утверждают, что команда работает на SSH меня @ дистанционного управления в "Interactive и Non шелл". Очень хорошо, но вот моя точка зрения.

То, что я есть, я добавил простой тест в моей .bashrc, которые выглядят как этот

echo $- 
# If not running interactively, don't do anything 
case $- in 
    *i*) echo 'Interactive';; 
    *) echo 'Non Interactive';; 
esac 

Теперь, вместо двойных кавычек (") Я завернутые пример Capistrano в одинарные кавычки ('), потому что я чувствовал, что двойные кавычки расширить выражение для текущей оболочки (в моем случае это мой ноутбук tty терминала)

Результат:

ssh [email protected] '[[ $- == *i* ]] && echo "Interactive" || echo "Not interactive"' 
hBc 
Non Interactive 
Not interactive 

Question 1: - Правильно ли находится код Capistrano doc ?. Глядя на мой результат выше, кажется, что команда запускается через ssh в неинтерактивной и не-login оболочке.

Question 2: Если я прав (в вопросе 1), как я могу запустить команду в интерактивной оболочке ?. У меня было впечатление, что параметры -t заставят выделить tty, и это поможет. Но это тоже не помогает.

ssh [email protected] -t '[[ $- == *i* ]] && echo "Interactive" || echo "Not interactive"' 
hBc 
Non Interactive 
Not interactive 
Connection to remote closed. 

Question 3: Оригинальный вопрос сейчас. Я использую Mina для моего развертывания. Теперь во время мини-развертывания rvm никогда не загружается.

Причина моего Баш имеет следующие определения в Bashrc

# bashrc 
case $- in #when mina load bashrc it's a non-interactive shell. 
    *i*) ;; 
     *) return;; 
esac 

source ~/.rvm/scripts/rvm # this is never gets executed 

Question 4(a) Как люди работают вокруг этой проблемы ?. Разумеется, перемещение исходной загрузки rvm в верхней части файла поможет, но я ищу другой ответ.

Question 4 b: Как Капистрано и Мина справляются с этим. Если они могут?

+0

Похоже, что связанные документы правильны: «По умолчанию Capistrano всегда назначает неинтерактивную, неинтерактивную оболочку». –

ответ

2

Я не использую RVM, но я возьму быстрые трещины на ваш вопрос:

Q1: Если есть другая часть документации, которую я не хватаю, вы имеете СУЙ цитируемом. В нем написано:

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

Q2: Вы не можете/не должны. Capistrano развертывает должен быть полностью без присмотра, и в этом случае нет необходимости в интерактивной оболочке.

Q3: Здесь я не уверен, потому что я использовал только rbenv. Однако я сделаю это. Используйте команду https://github.com/capistrano/rvm для установки RVM. Если у вас есть это, если у вас есть команда в дополнение к перечисленным здесь: https://github.com/capistrano/rvm/blob/master/lib/capistrano/tasks/rvm.rake#L53, используйте append :rvm_map_bins, 'nameofexecutable', чтобы сделать RVM применимым к вашей команде.

Q4a/b: см. Q3.

+0

Спасибо за исправление меня, но я имел в виду эту часть [http://capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/# как-кан-я проверка] (http://capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/#how-can- я проверяю) – Viren

Смежные вопросы