分页: 1 / 1

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

发表于 : 2014-07-12 10:47
careone
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 ;;

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

发表于 : 2014-07-12 10:58
zhw2101024
目测可以通过环境变量DISPLAY来判断,楼主自己对比一下。
echo $DISPLAY

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

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

发表于 : 2014-07-12 21:11
dynamic0603
用tty命令啦
自己在图形界面下的终端和控制台(ctrl+alt+f1-f6)运行一下就知道区别啦

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

发表于 : 2014-07-16 9:43
careone
首先感谢 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 操作);

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

发表于 : 2014-07-16 9:52
eexpress
tty+env里面搜索session就是。

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

发表于 : 2014-07-16 16:29
cjxgm

代码: 全选

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

代码: 全选

[ -n "$EDITOR" ]