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