我正在使用 Scientific Linux(版本=7.6(Nitrogen))的远程服务器上工作。我用 Python3 做了一个简单的 Web 应用程序,我发现自己不断打开 Mate 终端(尽管任何终端都可以),并编写
bash
python3 my_app.py
因此,我可以检查我的应用程序是否在本地浏览器中运行。
我想要一种方法来简化此操作,只需单击一个 shell 脚本即可打开终端窗口并运行提到的命令。之后,终端窗口应保持打开状态,我应该能够在浏览器中检查我的 Web 应用程序。
我用这一行编写了一个 shell 脚本:
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 (注:我尝试了所有其他答案,但它们都不起作用,加布里埃尔·斯台普斯的答案是唯一几乎起作用的答案)。我还允许该文件作为程序执行。
该解决方案有两个问题。首先,终端不会保持开放状态。其次,当我单击该文件时,我收到以下消息(在终端关闭之前):ModuleNotFoundError: No module named 'flask'
。这是因为该脚本在此服务器中使用了错误版本的 python3。管理员安装了一个,我的主目录中安装了 anaconda 版本。我一直bash
在使用之前通过编写来解决这个问题python3 my_app.py
。似乎在我使用bash
主目录中的文件 .bashrc 后,该变量$PATH
优先考虑我的 python3 版本(我检查了在终端中$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
,或者您可以在命令中显式指定 python 版本,/path/to/python3
而不是 plain 。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'"