다른 스크립트(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)
일하다.