X11

如何在 X 會話的第一個 shell 啟動時啟動命令?

  • June 1, 2021

我在 Pop-OS 上執行 Gnome!20.04。

我正在使用terminatorzsh外殼。我只想fortune在 X 會話中第一次使用 zsh shell 時啟動。

我已經嘗試過這樣的事情.zshrc

### count the lines of
ps -ax | grep zsh
ps -ax | grep /zsh

###
[ -z "$(pidof zsh)" ] && fortune

PS:我很難為這個問題找到合適的標籤

鑑於“每個 X 會話一次”的精確要求,儲存在目前 X 會話中已經完成的資訊的最自然的位置是在 X 伺服器的狀態中。X 伺服器上沒有真正的自定義全域數據的預期位置,但是有一個可以隨時更改的自定義全域配置的位置,這對於這裡的目的來說已經足夠接近了:X 資源。操作 X 資源的命令行工具是xrdb.

請注意,這xrdb很古怪,X.org 實現存在非常長期存在的錯誤。您可能不想使用xrdb -load(刪除所有先前載入的配置,如文件所示)或xrdb -remove(刪除所有先前載入的配置,不像它應該做的那樣)。

您的未經測試的程式碼.zshrc

if [[ -n ${DISPLAY:+set} ]] && whence xrdb >/dev/null; then
 if xrdb -query | grep -q '^pietrodito\.session\.ran-fortune:.*true'; then
   fortune
   xrdb -merge <<<'pietrodito.session.ran-fortune: true'
 fi
fi

要取消設置測試選項:

xrdb -load <(xrdb -query | grep -v '^pietrodito\.session\.ran-fortune:)

請注意,這不是原子的。fortune如果您幾乎在同一時間啟動 zsh 實例,則可能會執行多次。

引用自:https://unix.stackexchange.com/questions/651907