문제 설명:
Bash 스크립트는 이름 목록의 각 이름에 대해 새 화면 세션을 만드는 데 사용됩니다. 각 이름에 대해 해당 이름을 입력으로 사용하여 Python 스크립트가 실행됩니다. Bash 스크립트는 올바른 Python 버전(anaconda 패키지의 Python 3)이 포함된 경로를 설정합니다.
#!/bin/sh
export PATH=~/anaconda3/bin/python:$PATH
while read p; do
screen -dm -S $p bash -c "cd /inside/home/thjmatth/essential; python3 essentialpairs_ttest_tissue_1.py; exec sh"
done <cells.txt
위와 같이 경로를 설정하면 올바른 버전의 Python을 실행할 수 없으므로 실행하려는 Python 스크립트에 다음 shebang을 추가했습니다.
#!~/anaconda3/bin/python python3
여전히 주사위 없음: 사용 /usr/bin/python
되어서는 안 될 때에도 여전히 사용되고 있습니다. 이 프로그램이 내가 지정한 경로에 따라 Python 버전을 실행하도록 하려면 어떻게 해야 합니까?
1번을 시도해보세요:
새로운 사방:
#!/inside/home/thjmatth/anaconda3/bin/python/
새로운 bash 스크립트:
#!/bin/sh
export PATH=~/anaconda3/bin/python:$PATH
while read p; do
screen -dm -S $p bash -c "cd /inside/home/thjmatth/essential; python3 essentialpairs_ttest_tissue_1.py; exec sh"
done <cells.txt
Python 스크립트에 대한 새로운 권한:
chmod +x essentialpairs_ttest_tissue_1.py
실수:
bash: python3: command not found
이 화면에서 어떤 Python을 실행하면 여전히 표시되나요?/usr/bin/python
해결책:
위의 시도 1과 동일하지만 bash 스크립트의 3행을 변경하여 실행 파일 대신 디렉터리로 만듭니다.
export PATH=~/anaconda3/bin/python:$PATH
답변1
export PATH=~/anaconda3/bin/python:$PATH
실행 파일의 경로인 것 같습니다. PATH
디렉터리는 다음과 같이 포함되어야 합니다.
export PATH=~/anaconda3/bin:$PATH
#!~/anaconda3/bin/python python3
- Shebang 라인에는 실제 경로가 필요하며 실행되지 않습니다.물결표 확장(그것은 당신의 껍질에 있습니다). 실행 파일의 실제 경로를
/
. ~/anaconda3/bin/python
python3
Shebang 라인은 인수 와 그 뒤에 스크립트 이름을 사용 하여 실행됩니다 . 아마도 이것을 원하지 않고 실행하거나python
대신python3
.#!/home/thomas/anaconda3/bin/python
screen -dm -S $p bash -c "cd /inside/home/thjmatth/essential; python3 essentialpairs_ttest_tissue_1.py; exec sh"
Shebang 라인을 업데이트한 후에도 이 라인을 계속 실행하면 무시됩니다. ! 와 달리 python3
사용자 가 만든 라인이 실행되고 스크립트가 차례로 실행되며 Shebang 라인은 주석으로 건너뜁니다. 스크립트를 실행 가능하게 만들면( ) 직접 실행할 수 있습니다.PATH
python
chmod +x essentialpairs_ttest_tissue_1.py
./essentialpairs_ttest_tissue_1.py
그리고 Shebang 라인이 처리됩니다.
이 경우 다음을 수행할 수 있습니다.아마도변수를 재설정하는 Bash 시작 구성이 없으면 PATH
첫 번째 부분에서 변수를 수정하십시오. 실행 파일 이름이 이면 해당 이름을 사용하도록 명령줄을 python
업데이트해야 합니다 .screen
python3
답변2
가능한 해결책
두 번째 시도와 관련하여 Python 스크립트의 shebang을 사용합니다.
~
Shebang에서는 사용할 수 없습니다 . 실제 경로(#!/inside/home/thjmatth/...
)여야 합니다.- 디렉토리 이름과 프로그램 이름 사이에는 공백이 있어서는 안 됩니다
#!/inside/home/thjmatth/anaconda3/bin/python/python3
.
위생 검사:/inside/home/thjmatth/anaconda3/bin/python
이라는 실행 프로그램 python3
(즉, 인터프리터의 전체 경로 이름은 무엇입니까)이 포함 된 디렉토리가 있습니까
/inside/home/thjmatth/anaconda3/bin/python/python3
?
시도해 볼 가치가 있는 것
이렇게 하려면 스크립트를 변경하세요.
#!/bin/sh
export PATH=~/anaconda3/bin/python:$PATH
while read p; do
type python3
screen -dm -S "$p" bash -c "type python3; exec sh"
done <cells.txt
무슨 일이 일어나고 있는지 알아낼 수 있는지 확인해 보세요. 여전히 문제가 있는 경우 위의 출력을 포함하도록 질문을 편집하세요.
또 다른 한가지:"$p"
타당한 이유가 없고 수행 중인 작업을 확실히 알고 있는 경우가 아니면 항상 쉘 변수(예: )에 대한 모든 참조를 인용해야 합니다.