저는 Scientific Linux(버전=7.6(Nitrogen))를 사용하는 원격 서버에서 작업하고 있습니다. 나는 Python3에서 간단한 웹 애플리케이션을 만들었고, 계속해서 Mate 터미널을 열고(모든 터미널은 작동하지만) 글을 쓰는 것을 발견했습니다.
bash
python3 my_app.py
따라서 내 앱이 내 브라우저에서 로컬로 작동하는지 확인할 수 있습니다.
나는 이것을 더 쉽게 만드는 방법을 원하며 터미널 창을 열고 언급된 명령을 실행하는 쉘 스크립트를 클릭하기만 하면 됩니다. 그 후에는 터미널 창이 열려 있어야 하며 브라우저에서 웹 애플리케이션을 확인할 수 있어야 합니다.
나는 다음 줄로 쉘 스크립트를 작성했습니다.
gnome-terminal --tab --title="tab 1" --command="bash -c 'python3 my_app.py; $SHELL'"
여기에서 권장하는 대로 Ubuntu의 경우:https://askubuntu.com/questions/46627/how-can-i-make-a-script-that-opens-terminal-windows-and-executes-commands-in-the (참고: 다른 모든 답변을 시도했지만 작동하지 않았습니다. Gabriel Staples 답변이 거의 작동한 유일한 답변이었습니다.) 또한 파일을 프로그램으로 실행하도록 허용했습니다.
이 솔루션에는 2가지 문제가 있습니다. 첫째, 터미널이 열려 있지 않습니다. 둘째, 파일을 클릭하면 다음 메시지가 표시됩니다(터미널이 닫히기 전): ModuleNotFoundError: No module named 'flask'
. 이는 스크립트가 이 서버에서 잘못된 버전의 python3을 사용하고 있기 때문입니다. 관리자가 설치한 버전이 있고 내 홈 디렉터리에 내가 설치한 아나콘다 버전이 있습니다. 나는 bash
를 사용하기 전에 글을 써서 이 문제를 해결해 왔습니다 python3 my_app.py
. bash
내 홈 디렉토리에 있는 .bashrc 파일을 사용한 후에 변수가 내 python3 버전에 우선순위를 부여하는 것 같습니다 ( 터미널에 쓰기 전후가 다른지 $PATH
확인했습니다 ).$PATH
bash
터미널 창을 열고 그 안에서 명령을 실행한 후 계속 열려 있는 스크립트(Scientific Linux에서)를 만드는 방법이 있는지 궁금합니다.
또한 이 후에 내 브라우저에 웹 애플리케이션이 자동으로 팝업되는 방법이 있는지 궁금합니다.
답변1
명령이 완료되면 터미널이 닫힙니다. 터미널을 열어두기 위해 일반적으로 다음과 같은 프롬프트를 사용하여 스크립트가 완료되지 않도록 합니다.
while [[ \$response != q ]]; do read -n 1 -p [q]uit? response; echo; done
따라서 스크립트의 경우 이를 명령 끝에 추가하십시오 bash -c
.
gnome-terminal --tab --title="tab 1" --command="bash -c 'python3 my_app.py; $SHELL'; 'while [[ \$response != q ]]; do read -n 1 -p [q]uit? response; echo; done'"
잘못된 Python이 사용되는 경우 다음 중 하나를 로드할 수 있습니다.~/.bashrc
사용하여 bash -i
, 또는 명령에 /path/to/python3
일반 대신 Python 버전을 명시적으로 지정할 수 있습니다 .python3
따라서 최종 명령은 다음 중 하나입니다.
gnome-terminal --tab --title="tab 1" --command="bash -ci 'python3 my_app.py; $SHELL'; 'while [[ \$response != q ]]; do read -n 1 -p [q]uit? response; echo; done'"
또는
gnome-terminal --tab --title="tab 1" --command="bash -c '/path/to/python3 my_app.py; $SHELL'; 'while [[ \$response != q ]]; do read -n 1 -p [q]uit? response; echo; done'"