ターミナルウィンドウを開き、そのウィンドウでコマンドを実行し、Scientific Linuxで開いたままにするスクリプトを作成する方法は?

ターミナルウィンドウを開き、そのウィンドウでコマンドを実行し、Scientific Linuxで開いたままにするスクリプトを作成する方法は?

私はScientific Linux(バージョン= 7.6(Nitrogen))を使用してリモートサーバーで作業しています。私はPython3でシンプルなWebアプリを作成していますが、Mate端末を開いて(どんな端末でも可能ですが)書き込みを続けています。

bash
python3 my_app.py

したがって、私のアプリケーションがローカルブラウザで実行されていることを確認できます。

シェルスクリプトをクリックしてターミナルウィンドウを開き、上記のコマンドを実行してそれを簡素化する方法が必要です。その後、ターミナルウィンドウが開いていて、ブラウザでWebアプリケーションを確認できるはずです。

私は次の行でシェルスクリプトを書いた。

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を使用しているためです。管理者が1つをインストールし、私のホームディレクトリにanacondaバージョンがインストールされています。私はbash以前に書いてこの問題を解決してきましたpython3 my_app.pybash私のホームディレクトリで.bashrcファイルを使用した後、変数は$PATH私のpython3バージョンよりも優先的に適用されるようです(ターミナルへの書き込みの前後に確認してみてください$PATH)。bash

ターミナルウィンドウを開き、その中でコマンドを実行してから、開いておくスクリプト(Scientific Linuxで)を作成する方法があるかどうか疑問に思います。

また、ブラウザにWebアプリが自動的にポップアップされるようにする方法があるかどうかを知りたいです。

ベストアンサー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'"

おすすめ記事