배경, 인수를 사용하여 하위 프로세스를 생성하는 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 '....'
비대화형(및 비로그인) 세션을 생성한다는 것입니다 .bash
source
~/.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). ).