拜托,
有人可以为我提供一些资料.xinitrc
吗?我很难找到一本好的手册来回答我的几个实际问题:
- 它宣称自己是通用 Bash 脚本,但实际上并非如此。
- 为什么有些命令需要
exec
而有些不需要? - 这个
exec
命令到底是什么? - 它是特定于 的二进制结构还是语法结构
xinitrc
? - 什么可以由 exec 运行,什么不能?
- 如何正确设置环境变量?
主流发行版的大多数用户甚至不必知道xinitrc
,对我来说也是如此,直到我不得不设置 Kodi“临时”外壳;使用超级简约的窗口管理器 TWM 并全屏启动 Kodi,因为kodi-standalone
shell 不适合我。
但回到xinitrc
:
工作示例:
#!/bin/bash
/usr/bin/twm &
sleep 1
exec xterm
为什么不需要twm
但不需要? sleep
exec
xterm
不工作的例子:
#!/bin/bash
/usr/bin/twm &
sleep 1
exec WINDOWING=x11 /usr/bin/kodi -geometry +0+0
此处exec
仅执行WINDOWING=x11
但忽略了该行的其余部分。我只是通过包装到另一个 Bash 脚本中使它工作WINDOWING=x11 /usr/bin/kodi -geometry +0+0
,这次是一个普通的,并且那个作为唯一的参数exec
; 然后它终于奏效了。
该
exec
命令将当前 shell 进程替换为执行给定命令所产生的进程。如果没有exec
,一旦命令终止,控制权就会交还给等待的 shell 会话。使用exec
时,当前的 shell 将被替换,因此从那时起,您的脚本将不再运行任何命令。该
~/.xinitrc
文件是一个 shell 脚本。它启动窗口管理器(twm
在您的情况下),可能还有您最初可能想要启动的其他 X11 客户端(例如xterm
或其他一些终端,并且xeyes
,显然)。这个脚本没有特殊的语法,除了它应该是一个有效的脚本(因为它是由一个 shell 脚本解释器运行的)。在您的第一个示例中,您使用
这将当前的 shell 进程替换为
xterm
. 如果没有exec
,您将获得完全相同的可见效果,但.xinitrc
脚本会在后台挂起,等待xterm
在自身终止之前终止(因为这是文件中的最后一个命令)。请注意,如果您已经完成
exec twm
,shell 将替换为自身,twm
这意味着它将无法运行脚本中的其他命令。这就是为什么您改为从twm
后台进程开始(&
最后是)。睡眠是为了twm
在启动终端之前正确启动。我认为这不是绝对必要的。事实上,如果您不需要窗口装饰或能够移动窗口或调整它们的大小,甚至不需要运行twm
或任何其他窗口管理器(至少不需要运行全屏xterm
)。在第二个示例中,您使用
现在,该
exec
命令不能用于设置这样的环境变量。相反,您将在调用之前WINDOWING
设置和导出变量:kodi