¿Puede algo además del shebang configurar al intérprete?

¿Puede algo además del shebang configurar al intérprete?

Estoy ejecutando un script (en tmuxinator) que intenta generar otro script (rvm). rvm explícitamente no permite el abastecimiento de sh. No pensé que eso sería un problema, porque el shebang en el script tmuxinator es

#!/bin/bash

pero cuando inserto el código sugerido por la gente de rvm para obtener rvm a partir de un script,

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

-Yo obtengo

sh: 6: [[: not found

¿Por qué se utiliza sh como intérprete allí? También he usado #!/usr/bin/zsh (que es el valor de $SHELL en el shell interactivo desde el que llamé al script) y #!/usr/bin/env zsh, pero dan la misma queja.

Respuesta1

¿RVM opera en un contexto /bin/sh? Esta es probablemente la razón por la que se encuentra con esta dificultad; el script fuente hereda el intérprete del padre. Ver:http://ss64.com/bash/source.html

. (operador fuente o punto)

Leer y ejecutar comandos desde el argumento del nombre de archivo en elcontexto actual del shell.

(el énfasis es mío)

Respuesta2

Parece que el problema fue que el script fue llamado desde Ruby con

exec(script)

y exec siempre opera en el contexto de /bin/sh, aparentemente a pesar de la línea shebang en el script llamado.

Cambiando a

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

obras.

información relacionada