
다른 스크립트(rvm)를 소스로 사용하려고 하는 스크립트(tmuxinator에서)를 실행 중입니다. rvm은 sh로부터의 소싱을 명시적으로 허용하지 않습니다. 나는 그것이 문제가 될 것이라고 생각하지 않았습니다. 왜냐하면 tmuxinator 스크립트의 shebang은 다음과 같습니다.
#!/bin/bash
하지만 rvm 사람들이 제안한 코드를 스크립트에서 소스 rvm에 삽입하면,
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
source "$HOME/.rvm/scripts/rvm"
fi
-나는 얻다
sh: 6: [[: not found
왜 sh가 그곳에서 통역사로 사용되고 있나요? 나는 또한 #!/usr/bin/zsh(스크립트를 호출한 대화형 셸의 $SHELL 값)와 #!/usr/bin/env zsh를 사용했지만 동일한 불만 사항을 표시합니다.
답변1
RVM은 /bin/sh 컨텍스트에서 작동합니까? 이것이 바로 이러한 어려움에 직면한 이유일 것입니다. 소스 스크립트는 상위 인터프리터를 상속받습니다. 보다:http://ss64.com/bash/source.html
. (소스 또는 도트 연산자)
파일 이름 인수에서 명령을 읽고 실행합니다.현재 쉘 컨텍스트.
(강조는 내 것)
답변2
문제는 스크립트가 Ruby에서 호출된 것 같습니다.
exec(script)
그리고 exec는 호출된 스크립트의 shebang 라인에도 불구하고 항상 /bin/sh의 컨텍스트에서 작동합니다.
다음으로 변경
exec('/bin/bash', '-c', script)
공장.