我在 Pop-OS 上运行 Gnome! 20.04。
我正在使用terminator
和zsh
外壳。我只想在fortune
第一次在 X 会话中使用 zsh shell 时启动。
我已经尝试过这些事情.zshrc
:
### count the lines of
ps -ax | grep zsh
ps -ax | grep /zsh
###
[ -z "$(pidof zsh)" ] && fortune
PS:我很难找到适合这个问题的标签
答案1
考虑到“每个 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 实例,则可能会运行多次。
答案2
fortune
仅当没有其他 zsh shell 运行时才会启动:
[[ "$(pidof zsh)" == *' '* ]] || fortune