我想在我的桌面上有一个图标来启动Redshift使用启动时从命令行读取的自定义参数。
这是我想出的:
#!/bin/bash
default_temperature=4500
echo "Default color temperature (Night) is "$default_temperature"K."
read -p "Type in the desired value: " temperature
temperature=${temperature:-$default_temperature}
nohup redshift-gtk -l "-23.9141:-147.6650" -t "6500:"$temperature &
以上文件保存为/home/redshift.sh
.我还创建了一个桌面条目来启动它,代码如下:
#!/usr/bin/env xdg-open
[Desktop Entry]
Name=Redshift (script)
Comment=Custom script to start Redshift with color temperature input
Exec="/home/redshift.sh"
Icon=redshift
Terminal=true
Type=Application
(第一行是自动添加的)。
预期的行为是:
- 用户双击桌面条目
- 控制台打开并要求(可选)输入
- 当用户按下 Enter 时,脚本应启动名为
redshift-gtk
的应用程序(实际上是一个位于/usr/bin
的 Python 脚本),带有指定的参数。
现在我不关心检查输入是否有效,也不关心进程是否已经在运行。
(工作)命令的一个例子是:
redshift-gtk -l "-23.9141:-147.6650" -t "5500:2400"
目前,我什至将启动脚本简化为这个
nohup redshift-gtk -l "-23.9141:-147.6650" -t "5500:2400" &
甚至尝试过
nohup redshift-gtk -l "-23.9141:-147.6650" -t "5500:2400" && exit
但是这些都不会关闭终端窗口,它只会保持打开状态。如果我手动关闭它,Redshift 进程将被终止(这显然不是我们想要的)。
尝试了网上找到的一些可能的解决方案,似乎都行不通。在 SO 中没有找到任何相关内容。
如何正确地做到这一点?
谢谢
最佳答案
我推荐的方法是通过screen
。它允许您从虚拟终端启动进程,然后从它分离,退出终端,然后稍后返回并重新连接到它(如果 session 仍然存在)。例如:
screen -d -m redshift-gtk -l "-23.9141:-147.6650" -t "5500:2400"
将以“分离模式”启动命令,然后您可以退出终端。如果您想在返回终端时检查 session ,您可以这样做:
screen -list
典型的输出看起来像这样:
There is a screen on:
58643..System(Detached)
1 Socket in /var/folders/qg/jxb2db8d2_57nrtq5vs0xcfw0000gn/T/.screen.
查看 screen
的手册页——那里有很多有用的信息。
关于linux - 如何从 bash 脚本启动程序,然后关闭终端但让程序保持事件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44350609/