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

0

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.

    
por bgates 12.04.2013 / 04:45

2 respostas

0

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.

    
por 13.04.2013 / 06:35
2

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)

    
por 12.04.2013 / 04:51