Bash 脚本:创建一个屏幕会话并在其中执行命令

phy*_*yyl 5 display bash shell python sh

我想写一个 bash 文件,它启动一个屏幕会话并在里面执行一个命令。

问题是,它首先创建一个会话,当您手动退出会话时,它会执行下一个命令。有没有办法在会话内执行命令?

这是我的代码,直到现在:

#!/bin/bash
screen -S test
python3 test.py
Run Code Online (Sandbox Code Playgroud)

djs*_*ide 8

您需要传递命令才能在屏幕会话中运行。您可以通过直接传递命令或调用运行您想要的任何命令的脚本来完成此操作。

screen -S test "python3 test.py"
Run Code Online (Sandbox Code Playgroud)

如果您使用此方法,请注意命令 ( python) 和传递给它的参数 ( test.py) 都在语音标记“..”内 - 如果您传递需要特定格式的语音标记的参数,这可能会变得复杂,并且它也许使用下面的方法更容易。

screen -S test bash -c "bash /home/user/test.sh"
Run Code Online (Sandbox Code Playgroud)

其中 test.sh 位于 /home/user/ 中,可执行 ( chmod +x ./test.py) 并包含:

#!/bin/sh
python3 test.py
Run Code Online (Sandbox Code Playgroud)

第二种方法的优点是您可以在脚本中包含任意数量的命令,它们将一个接一个地运行。

您可以通过使用任务后台来“同时”运行多个命令:

#!/bin/sh
# All 3 will run at the same time
python3 test.py &
python3 test1.py &
python3 test2.py &
Run Code Online (Sandbox Code Playgroud)

在 SF 的类似问题中可以找到一些额外的聪明技巧,最后要注意的一件事是,使用所有这些方法,一旦程序/脚本退出,屏幕会话本身就会关闭。如果您不希望它这样做,您需要考虑执行 bash 会话,该会话调用脚本,然后返回到 bash 会话 - 就像这样screen -S test "someCommand; bash"