Я использую Gnome на Pop-OS! 20.04.
Я использую terminator
и zsh
оболочку. Я хочу запустить fortune
только первый раз, когда я использую оболочку zsh в сеансе X.
Я пробовал такие вещи в .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:
[[ "$(pidof zsh)" == *' '* ]] || fortune