Capistrano Doc sagtInteractive Shell mit Mina und 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 Zustand, dass der Befehl ausgeführt wird auf mich in @ Remote ssh "Interactive und Nicht-Login-Shell". Sehr gut, aber hier ist mein Punkt.
Was ich tat, ist, habe ich einen einfachen Test in meinem Bashrc die
echo $-
# If not running interactively, don't do anything
case $- in
*i*) echo 'Interactive';;
*) echo 'Non Interactive';;
esac
nun so aussehen, statt doppelte Anführungszeichen ("
) ich das Capistrano Beispiel in einem einzigen Zitat eingewickelt ('
), weil ich das doppelte Anführungszeichen fühlte den Ausdruck für den aktuell Shell erweitern (in meinem Fall ist es mein Laptop tty
Terminal)
Ergebnis:
ssh [email protected] '[[ $- == *i* ]] && echo "Interactive" || echo "Not interactive"'
hBc
Non Interactive
Not interactive
Question 1:
- Ist der Capistrano doc korrekt?. Wenn ich mein Ergebnis oben anschaue, scheint der Befehl über ssh ausgeführt zu werden, und zwar in nicht interaktiver und nicht logischer Shell.
Question 2:
Wenn ich richtig bin (in Bezug auf Frage 1) wie kann ich einen Befehl in einer interaktiven Shell ausführen ?. Ich war unter dem Eindruck -t
Optionen würden tty
Allokation erzwingen und das würde helfen. Aber das hilft auch nicht.
ssh [email protected] -t '[[ $- == *i* ]] && echo "Interactive" || echo "Not interactive"'
hBc
Non Interactive
Not interactive
Connection to remote closed.
Question 3:
Zur ursprünglichen Frage jetzt. Ich benutze Mina für meine Deployment-Sachen. Nun, während mina deploy wird der rvm nie geladen. meine bash
Grund hat die folgenden Definitionen in 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)
Wie die Menschen, um dieses Problem arbeiten ?. Sicherlich verschiebe ich die rvm-Source-Last am Anfang der Datei, aber ich suche nach einer anderen Antwort.
Question 4 b
: Wie gehen Capistrano und Mina damit um? Wenn sie können?
Es ist wie die verknüpften Dokumente sieht richtig sind: „Standardmäßig Capistrano weist immer eine nicht-Login, nicht-interaktive Shell.“ –