Parece que o problema foi que o script foi chamado de Ruby com
exec(script)
e exec sempre opera no contexto de / bin / sh, a linha shebang no script chamado aparentemente não obstante.
Mudando para
exec('/bin/bash', '-c', script)
funciona.
Estou executando um script (no tmuxinator) que tenta criar outro script (rvm). O rvm explicitamente não permite o sourcing de sh. Eu não acho que isso seria um problema, porque o shebang no script tmuxinator é
#!/bin/bash
mas quando insiro o código sugerido pelo pessoal do rvm para obter o rvm de um script,
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
source "$HOME/.rvm/scripts/rvm"
fi
-Eu obtenho
sh: 6: [[: not found
Por que o sh está sendo usado como intérprete? Eu também usei #! / Usr / bin / zsh (que é o valor de $ SHELL no shell interativo do qual chamei o script) e #! / Usr / bin / env zsh, mas eles apresentam a mesma reclamação.
Parece que o problema foi que o script foi chamado de Ruby com
exec(script)
e exec sempre opera no contexto de / bin / sh, a linha shebang no script chamado aparentemente não obstante.
Mudando para
exec('/bin/bash', '-c', script)
funciona.
O RVM opera em um contexto / bin / sh? Esta é provavelmente a razão pela qual você está encontrando essa dificuldade; o script source'd herda o intérprete do pai. Veja: link
. (source or dot operator)
Read and execute commands from the filename argument in the current shell context.
(ênfase minha)