셰방 외에 통역사를 설정할 수 있나요? [폐쇄]

셰방 외에 통역사를 설정할 수 있나요? [폐쇄]

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

일하다.

관련 정보