bash -c를 사용하여 문자열 명령을 실행할 때 경로를 제어하는 ​​방법은 무엇입니까?

bash -c를 사용하여 문자열 명령을 실행할 때 경로를 제어하는 ​​방법은 무엇입니까?

배경, 인수를 사용하여 하위 프로세스를 생성하는 Python 라이브러리를 사용하려고 합니다 ["bash", "-c", "python someScript.py"]. Python 2.6이 실행되지만 Python2.7이 필요합니다. Python 2.6이 이제 온라인 상태입니다 /usr/bin/. Python 2.7이 이제 온라인 상태입니다./usr/local/bin

내가 말하면 다음 python -V과 같은 type python결과를 얻을 수 있습니다.

Python 2.7.10그리고python is aliased to /usr/local/bin/python2.7

.bashrc(참고로 저는 이미 파일에 이 별칭을 설정했습니다 alias python=/usr/local/bin/python2.7. :)

그러나 전화하면 다음과 같은 bash -c "type python"결과를 얻습니다.

python is /usr/bin/python

echo $PATH둘 다 bash -c "echo $PATH"동일한 경로를 출력합니다.

/usr/local/bin:/usr/local/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/lib:/usr/local/lib

/usr/local/bin.bashrc에서 PATH를 내보낼 때 먼저 PATH를 넣으려고 합니다.

그래서 제 질문은, 문자열 실행 명령을 사용할 때 제어 경로(이 경우 Python)는 무엇입니까 bash -c? 구체적으로 bash -c "python"Python 2.7을 사용하는 방법은 무엇입니까? 편집: 매개변수는 ["bash", "-c", "python someScript.py"]라이브러리에 하드코드되어 있으며 라이브러리 소스를 수정하고 싶지 않습니다.

답변1

문제는 실행 시 런타임 구성 파일이 없는 bash -c '....'비대화형(및 비로그인) 세션을 생성한다는 것입니다 .bashsource~/.bashrc

alias에서 정의할 때 ~/.bashrc-i옵션을 사용하여 bash대화형 환경과 source파일을 시뮬레이션할 수 있습니다 ~/.bashrc.

bash -ic '....'

그것은 지금 alias이용 가능해야 합니다 .

예:

$ alias l
alias l='ls'

$ bash -c 'l'
bash: l: command not found

$ bash -ic 'l'
bar  foo

답변2

명령의 전체 경로를 사용하십시오.bash -c /usr/local/bin/python

답변3

나는 귀하의 .bashrc가 이와 같이 비대화형 쉘에서 유래했다고 생각하지 않습니다. PATH 설정을 .profile 파일에 넣어 보십시오. 이는 다른 쉘에서도 작동합니다(또는 bash로 설정하려는 경우 .bash_profile). ).

관련 정보