algo além do shebang pode definir o intérprete?

algo além do shebang pode definir o intérprete?

Estou executando um script (no tmuxinator) que tenta obter outro script (rvm). O rvm não permite explicitamente o fornecimento de sh. Não pensei 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 a partir de um script,

if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
  source "$HOME/.rvm/scripts/rvm"
fi

-Eu recebo

sh: 6: [[: not found

Por que sh está sendo usado como intérprete lá? 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.

Responder1

O RVM opera em um contexto /bin/sh? Este é provavelmente o motivo pelo qual você está enfrentando essa dificuldade; o script de origem herda o intérprete do pai. Ver:http://ss64.com/bash/source.html

. (operador fonte ou ponto)

Leia e execute comandos do argumento filename nocontexto atual do shell.

(ênfase minha)

Responder2

Parece que o problema foi que o script foi chamado de Ruby com

exec(script)

e exec sempre opera no contexto de /bin/sh, apesar da linha shebang no script chamado, aparentemente.

Mudando para

exec('/bin/bash', '-c', script)

funciona.

informação relacionada