xinitrc 的奧秘——什麼可以存在,什麼不可以存在
拜託,
有人可以為我提供一些資料
.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 腳本解釋器執行的)。在您的第一個範例中,您使用
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