确定 bash 脚本是通过单击图标还是从终端启动的

确定 bash 脚本是通过单击图标还是从终端启动的

我有一个脚本,我想让它根据是从终端启动还是通过双击文件管理器中的图标启动而有不同的行为。我可以这样做吗?

答案1

您可以使用返回状态的差异来tty帮助您。

if tty -s;
then
    # running in a terminal
    ...
fi

(默默tty -s运行tty命令)

退出状态:

  • 如果标准输入是终端,则为 0
  • 如果标准输入不是终端
  • 2 如果给出的参数不正确
  • 3 如果发生写入错误

或者你可以使用 shell 的内置测试来检查标准输入/输出是否来自/到终端:

if [ -t 0 ];  # stdin
then
    # running in a terminal
    ...
fi

答案2

如果这是在您自己的计算机上,并且您已经制作了图标,您只需在图标引用的命令行上传递一个额外的参数,例如:

/path/to/my/script fromgui arg2 arg3 .. argN

只是测试[[ "$1" == "fromgui" ]]或者类似。

答案3

另一个可能的检查是查看 /proc/$PPID/cmdline 中的内容

这是生成你的进程的命令行(NUL 分隔),

相关内容