我正在尝试 ssh 到远程计算机并运行 shell 脚本,这会打开 GUI。我希望 GUI 在远程计算机上打开并保持打开状态(所以我使用DISPLAY=:0 nohup
)。我试过:
ssh -t <user-name>@<remote-host> "DISPLAY=:0 nohup ~/<script-to-be-run>.sh"
这很有效,但我无法在不关闭窗口的情况下发送另一个命令,因为 shell 脚本中调用的 GUI 占用了命令行。我尝试使用"DISPLAY=:0 nohup ~/<script-to-be-run>.sh &"
和"DISPLAY=:0 nohup ~/<script-to-be-run>.sh && exit"
,但它们产生相同的结果:GUI 打开并且命令行保持挂起状态。
我读到有关使用screen
从 shell 会话中分离命令的信息,但这似乎不起作用。在远程机器上(不通过 ssh 运行,只是坐在它前面),我尝试了:
screen -m -S 'test' 'DISPLAY=:0 nohup ~/<script-to-be-run>.sh'
但我收到错误:
Cannot exec 'DISPLAY=:0 nohup ~/<script-to-be-run>.sh':No such file or directory
。
该命令DISPLAY=:0 nohup ~/<script-to-be-run>.sh
在远程计算机上运行时(坐在远程计算机前面)运行得很好。有人知道如何使用此命令,screen
以便我可以在自己的终端容器中运行单个 GUI 命令吗?
答案1
通常,screen
接受命令和参数,因此这可能有效:
screen -m -S 'test' nohup ~/<script-to-be-run>.sh
因为它不需要变量赋值,并且变量可能会被重置,所以您可能需要添加env
来设置变量:
screen -m -S 'test' env DISPLAY=:0 nohup ~/<script-to-be-run>.sh'