
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.