我希望桌面上有一个图标,可以使用自定义参数启动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
(第一行自动添加)。
预期的行为是:
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中没有找到任何相关内容。
如何正确地做到这一点?
由于
答案 0 :(得分:1)
我建议这样做的方式是screen
。它允许您从虚拟终端启动进程,然后从虚拟终端分离,退出终端,然后稍后返回并重新连接到它(如果会话仍然存在)。例如:
screen -d -m redshift-gtk -l "-23.9141:-147.6650" -t "5500:2400"
将以"分离模式"启动命令然后你可以退出终端。如果你想在返回终端时检查会话,你可以这样做:
screen -list
典型输出如下所示:
There is a screen on:
58643..System(Detached)
1 Socket in /var/folders/qg/jxb2db8d2_57nrtq5vs0xcfw0000gn/T/.screen.
查看screen
的手册页 - 那里有很多有用的信息。
答案 1 :(得分:0)
(鉴于OP的原始问题,这个建议没有实际意义。)
在bash
中,您可以尝试:
redshift-gtk -l "-23.9141:-147.6650" -t "5500:2400" &
disown $!
请注意,无论如何,&
是产生子流程所需的,&&
将等待它完成。
编辑:
我一定是非常粗心地阅读你的描述(或者错过了更新,如果有的话),所以我没有考虑在继续后台之前做输入的要求。你可以使用一个名为expect
的实用程序为这种效果做一些魔术,但这并不是一件容易的事。我希望能够给你更多的指示,但我自己只是触及了使用它的表面。