在Bash中,我怎么知道我目前是否在终端

时间:2012-12-18 20:19:23

标签: bash gnome

我想创建自己的个人日志文件,不仅可以在我登录和退出时记录,还可以在我锁定/解锁屏幕时记录。有点类似/ var / log / wtmp类固醇。

为此,我决定在登录到后台运行的Ubuntu时运行脚本,直到我退出。我这样做的计划是使用.bashrc将脚本添加到./startlogging.sh &,在脚本中我将使用trap来捕获信号。这很好,除了.bashrc每次打开一个新终端时都会运行,这不是我想要的记录器。

有没有办法告诉Bash当前登录是gnome登录?或者,我可以使用某种.gnomerc来运行我的脚本吗?

修改:这是我的脚本:

编辑2:删除了脚本,因为它与问题无关。我将重新提出我的另一个问题,而不是重新利用这个问题。

3 个答案:

答案 0 :(得分:4)

您是否正在寻找一种方法来检测它是什么类型的终端?

尝试:

echo $TERM

来自Wikipedia

  

TERM(类Unix) - 指定计算机终端或终端的类型   正在使用的模拟器(例如,vt100或哑)。

另请参阅:List of Terminal Emulators

答案 1 :(得分:0)

用于bash:〜/ .bash_logout

将在您退出时执行,这听起来就像您要尝试的那样。

答案 2 :(得分:0)

好吧,对于bash,你想要的是你的主目录中的.bash_login / .bash_logout(而不是.bashrc)这些都是在LOGIN shell启动/完成时运行的,这发生了任何时候您登录到shell(在tty或控制台上,或通过ssh或其他网络登录)。这些不是为在您创建的终端窗口中创建的bash进程运行的(因为它们不是登录shell),因此无论何时打开新终端都不会运行。

问题是,如果你使用一些不涉及终端的机制登录(例如在控制台上运行gdm以启动gnome或kde或unity会话),那么就没有登录shell所以.bash_login / logout从不跑。对于这种情况,最简单的可能是在.xsessionrc中添加一些东西,每次启动X会话时都会运行(对于任何这些GUI环境都会发生,无论你运行哪一个)。不幸的是,X会话结束时没有标准脚本运行。