
Ich führe ein Skript (in tmuxinator) aus, das versucht, ein anderes Skript (rvm) als Quelle zu verwenden. rvm erlaubt ausdrücklich keine Quellenangabe von sh. Ich dachte nicht, dass das ein Problem sein würde, da der Shebang im tmuxinator-Skript
#!/bin/bash
aber wenn ich den von den RVM-Leuten vorgeschlagenen Code einfüge, um RVM aus einem Skript zu beziehen,
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
source "$HOME/.rvm/scripts/rvm"
fi
-Ich bekomme
sh: 6: [[: not found
Warum wird dort sh als Interpreter verwendet? Ich habe auch #!/usr/bin/zsh (das ist der Wert von $SHELL in der interaktiven Shell, von der aus ich das Skript aufgerufen habe) und #!/usr/bin/env zsh verwendet, aber sie führen zum gleichen Problem.
Antwort1
Funktioniert RVM in einem /bin/sh-Kontext? Dies ist wahrscheinlich der Grund, warum Sie auf dieses Problem stoßen; das Quellskript erbt den Interpreter des übergeordneten Skripts. Siehe:http://ss64.com/bash/source.html
. (Quell- oder Punktoperator)
Lesen und Ausführen von Befehlen aus dem Dateinamen-Argument imaktueller Shell-Kontext.
(Hervorhebung von mir)
Antwort2
Das Problem schien zu sein, dass das Skript von Ruby aus aufgerufen wurde mit
exec(script)
und exec arbeitet immer im Kontext von /bin/sh, offensichtlich ungeachtet der Shebang-Zeile im aufgerufenen Skript.
Ändern in
exec('/bin/bash', '-c', script)
funktioniert.