[已解决]bash编程求助:如何判断命令是在图形界面,还是在虚拟控制台(ctrl+alt+f1-f6)运行

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
careone
帖子: 839
注册时间: 2007-12-17 21:41

[已解决]bash编程求助:如何判断命令是在图形界面,还是在虚拟控制台(ctrl+alt+f1-f6)运行

#1

帖子 careone » 2014-07-12 10:47

bash编程求助:如何判断命令是在图形界面,还是在虚拟控制台(ctrl+alt+f1-f6)运行

需求:
* 先判断命令是在图形界面(包括终端)运行,还是在虚拟控制台(ctrl+alt+f1-f6)运行;

** 如果是在图形界面,优先用 GNOME 下的 gedit 打开 文件 $LIST.
如是 gedit 命令未找到,再尝试 KDE 下的 kate, 以及 XFCE 的 mousepad。
如果仍找到,直接用 vi 打开文件;

** 是在虚拟控制台(ctrl+alt+f1-f6),直接用 vi 打开文件;

请高手指点. 不胜感激!

程序(anyget)完整代码见:
https://github.com/careone/anyget/tree/master/bin

代码示例如下:

代码: 全选

#! /bin/bash
LIST="$HOME/.anyget/anyget.list"

	echo "edit URLs in download resource file $LIST ..."
	if which gedit 2>/dev/null &>/dev/null; then
	  if [ "$?" = 0 ]; then
	    gedit "$LIST" &
	  fi
	elif which kate 2>/dev/null &>/dev/null; then
	  kate "$LIST" &
	elif which mousepad 2>/dev/null &>/dev/null; then
	  mousepad "$LIST" &
	else vi -n "$LIST"
	fi
	exit 0 ;;
上次由 careone 在 2014-07-16 10:06,总共编辑 1 次。
魁拔不死,天下不宁。
魁拔既死,天下不平。
--------------
Careone <emacslocale^126.com>
https://sourceforge.net/projects/emacslocale/files/
头像
zhw2101024
帖子: 1849
注册时间: 2009-03-28 16:10
系统: Arch debian win7
联系:

Re: bash编程求助:如何判断命令是在图形界面,还是在虚拟控制台(ctrl+alt+f1-f6)运行

#2

帖子 zhw2101024 » 2014-07-12 10:58

目测可以通过环境变量DISPLAY来判断,楼主自己对比一下。
echo $DISPLAY

PS:个人更倾向于使用EDITOR变量,这样更符合惯例,可以调用默认的文本编辑器,对于使用个性化编辑器并定义为EDITOR变量的用户来说比较友好。比如说tty下很多人不会vi,只会emacs。
看了下楼主的代码,提个小小建议:使用getopt/getopts或者只用短参数。这样的话不管是自己修改还是别人fork都更容易些,而且可靠性比纯手工处理要好一些。既然楼主放在github上了想必有开源的打算,清晰简洁的代码才会更有生命力。
dynamic0603
帖子: 259
注册时间: 2008-11-14 20:35

Re: bash编程求助:如何判断命令是在图形界面,还是在虚拟控制台(ctrl+alt+f1-f6)运行

#3

帖子 dynamic0603 » 2014-07-12 21:11

用tty命令啦
自己在图形界面下的终端和控制台(ctrl+alt+f1-f6)运行一下就知道区别啦
头像
careone
帖子: 839
注册时间: 2007-12-17 21:41

Re: bash编程求助:如何判断命令是在图形界面,还是在虚拟控制台(ctrl+alt+f1-f6)运行

#4

帖子 careone » 2014-07-16 9:43

首先感谢 2楼和3楼的关注和回复!

目录已采用 2楼 的 $DISPLAY 方案。

几点补充说明:

* 1 关于图形界面编辑器,后续版本会相应调整。
即把原

代码: 全选

gedit $LIST
改为

代码: 全选

if [ ! -z "$EDITOR" ]; $EDITOR $LIST;
else xdg-open $LIST
这样有更好的自动适应性;如果2楼的朋友有兴趣,有精力,希望有机会能多沟通和指点。

*2 二楼朋友说的看过代码,不知是否指 github 上的代码?
之前有查看过 getopt 和 getopts 的 相关手册及代码范例,但仍未能有效理解,所以一直用

代码: 全选

for option in "$@"; do

case "" in
-d) ... shift ;;
*)... shift ;;
esac
... 

done
结构来处理多参数

* 3 个人对 git 用法并不太熟悉,放在 GitHub 的起因,是之前本人写的 Emacs 汉化菜单包( emacs-locale )由一位热心网友提交到 GitHub, 后来才把自己用 bash 写的几个有用的部分程序,放到自己的 GitHub 上。
但最新版本是最先在本人 SourceForge 上的 deb 包中发布的 (因为不熟悉 git 操作);
魁拔不死,天下不宁。
魁拔既死,天下不平。
--------------
Careone <emacslocale^126.com>
https://sourceforge.net/projects/emacslocale/files/
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: bash编程求助:如何判断命令是在图形界面,还是在虚拟控制台(ctrl+alt+f1-f6)运行

#5

帖子 eexpress » 2014-07-16 9:52

tty+env里面搜索session就是。
● 鸣学
头像
cjxgm
帖子: 1952
注册时间: 2010-04-23 20:40
系统: Arch Linux
来自: 浙江·杭州
联系:

Re: [已解决]bash编程求助:如何判断命令是在图形界面,还是在虚拟控制台(ctrl+alt+f1-f6)运行

#6

帖子 cjxgm » 2014-07-16 16:29

代码: 全选

[ ! -z "$EDITOR" ]
可以写成

代码: 全选

[ -n "$EDITOR" ]
Clanjor Prods. | Develop for Developers. (C++, Lua) | 作曲编曲 | 实时渲染引擎
回复