LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1278|回复: 13

如何写SHELL判断当前运行的console是X还是非X下的?

[复制链接]
发表于 2006-4-28 09:51:06 | 显示全部楼层 |阅读模式
为测试模块,写了一个加载模块的脚本,但模块要在非X的console下才能显示信息,
因为脚本是写给老师留作教学用,所以要考虑周全。学生们很可能在X下运行脚本啊!
(废话到此)

有一点说明:
非X下的console是按CTRL+ALT+F2进入的,进程都没于变,通过检查X进程行不通。
发表于 2006-4-28 10:45:01 | 显示全部楼层

  1. #!/bin/bash

  2. if ps|grep tty > /dev/null; then
  3.     echo "Console"
  4. else
  5.     echo "X"
  6. fi
复制代码


应该能够满足你的需求。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-28 12:07:12 | 显示全部楼层
多谢~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2006-4-28 12:11:21 | 显示全部楼层
ps aux
检查当前进程的tty是不是?
回复 支持 反对

使用道具 举报

发表于 2006-4-28 16:58:52 | 显示全部楼层
有个更方便的方法,查看环境变量TERM,例:
================================
1.使用vt100登录:
gzhang@xianlinux4-1: echo $TERM
vt100

2.使用xterm登录:
gzhang@xianlinux4-2: echo $TERM
xterm
回复 支持 反对

使用道具 举报

发表于 2006-4-28 18:25:07 | 显示全部楼层
之前有人问过这个问题,不过我找不到。破烂搜索功能!

一般来说 echo $DISPLAY 就好了。不是很准确,因为有的人喜欢在启动脚本里边设置DISPLAY 变量。


其实很多情况要考虑的,比如X下开了一个窗口,但是su - 了,这个怎么判断?因为这个和直接在console下login效果是一样的,又或者  ssh 登录的,怎么算。
回复 支持 反对

使用道具 举报

发表于 2006-4-28 22:21:52 | 显示全部楼层
  1. # X
  2. $ cat /proc/self/environ | tr '\0' '\n' | grep -w 'TERM'
  3. TERM=xterm
  4. #non-X
  5. $ cat /proc/self/environ | tr '\0' '\n' | grep -w 'TERM'
  6. TERM=linux
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-5-2 18:34:33 | 显示全部楼层
顺路问一下,是不是console下的shell都是login shell,X下的都是non-logout shell?
回复 支持 反对

使用道具 举报

发表于 2006-5-3 20:40:15 | 显示全部楼层
你可以在login shell里面再打开一个非login shell。
回复 支持 反对

使用道具 举报

发表于 2006-5-4 11:05:31 | 显示全部楼层
个人感觉检查TERM, DISPLAY, WINDOWID等都不可靠。最好还是检查当前命令所运行的终端类型。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表