Ved*_*als 21 command-line bashrc
我安装了 gnome-terminal 和 Guake。我想在这些终端模拟器启动时显示不同的启动消息。我应该在 .bashrc 中编写什么代码才能实现这一点?
jll*_*gre 12
这个功能应该做的工作:
container() {
pid=$$
while true; do
pid=$(ps -h -o ppid -p $pid 2>/dev/null)
case $(ps -h -o comm -p $pid 2>/dev/null) in
(gnome-terminal) echo "Running in gnome terminal";return;;
(xterm) echo "Running in xterm";return;;
(rxvt) echo "Running in rxvt";return;;
(python) if [ ! -z "$(ps -h -o args -p $pid 2>/dev/null | grep guake)" ]; then echo "Running in Guake"; return; fi ;;
esac
[[ $(echo $pid) == 1 ]] && break
done
}
container
Run Code Online (Sandbox Code Playgroud)
miu*_*miu 12
您可以通过搜索父进程名称来获取终端模拟器名称。因此它适用于每个终端模拟器。
在 bash、zsh 等中:
basename "/"$(ps -f -p $(cat /proc/$(echo $$)/stat | cut -d \ -f 4) | tail -1 | sed 's/^.* //')
Run Code Online (Sandbox Code Playgroud)
带鱼壳:
basename "/"(ps -f -p (cat /proc/(echo %self)/stat | cut -d \ -f 4) | tail -1 | sed 's/^.* //')
Run Code Online (Sandbox Code Playgroud)
CMC*_*kai 12
尝试这个:
echo $TERM
Run Code Online (Sandbox Code Playgroud)
这更权威,但可能会被你的程序搞砸。但是在我的上,它说xterm,在 ttys 上说linux,我认为它代表 Linux 控制台。
在很多linux系统上echo $TERM返回xterm请参阅上面的 stazher 帖子。
要获得实际使用的终端,请执行以下操作:
1:关闭当前正在运行的每个终端实例。
2:使用常用方法打开新终端。
3:输入命令如下:
ps -o 'cmd=' -p $(ps -o 'ppid=' -p $$)
4:返回应该是这样的:
lxterminal --geometry=135x20
这是细分:
所以:ps是“进程状态”
ps选项-o显示与指定的空格或逗号分隔的关键字列表相关的信息。听起来很复杂,但事实并非如此。(空格或逗号)分隔(关键字列表)指定。
所以,(关键字列表)是'cmd='只是列表中的一个关键字。所以,只是要求显示打开终端的命令。
ps 选项-p是“按进程 ID” 哇,这对于 ps 来说是非常好的选项。问题是,您必须将此进程 ID 传递给 ps。那么,如何获取进程id呢?我们解开表达式 $(ps -o 'ppid=' -p $$)
在这里我们必须开始更深入地思考。我希望我发明了这个 bash 俏皮话,但我没有。我想我是从https://wiki.archlinux.org/偷来的某个地方偷来的,我再也找不到了。这些人很棒,但很多时候我无法理解他们说要做什么,直到经过大量研究之后。我们现在能做的就是理解它,因为我会解释。
所以我们知道$bash 中的扩展运算符。我喜欢思考“拆开”。因此,$(foo -opt bar)将展开或扩展“foo -opt bar”。但在 bash 中,单圆括号(...)打开子 shell。
因此,$(foo -opt bar)将“foo -opt bar”扩展为在子 shell 中运行。非常奇怪且难以理解。
好的,现在我们再次运行几乎相同的命令,ps -o 'ppid=' -p $$但是这次 ps,进程状态,向我们展示了他可以从子 shell 实例中看到的内容。
-o关键字列表,和以前一样只有一个关键字,但这ppid=是直接询问父 shell 的进程 ID!来自女儿的壳内!非常聪明,是吗?当我能理解这一点时,我非常兴奋!
-p再次强调,“按进程 ID”,在 bash 中$$是进程 ID。
如果您直接从第一个 shellps -o 'ppid=' -p $$调用 或任何其他命令,他可能会说 pid=1,或者来自 xWindow 的 pid,或者来自您的桌面程序,或者您可能会获得 shell 的实际 pid。$$如果你问很多次,你可能每次都会得到不同的答案!
但是,如果您调用女儿并问她“谁是您的爸爸”,她会告诉您!非常聪明。我希望我能像天才一样发明这种方法。
| 归档时间: |
|
| 查看次数: |
22730 次 |
| 最近记录: |