Как запустить команду при запуске только самой первой оболочки X-сессии?

Если он у вас есть, используйте параметр -mindepth, который можно использовать здесь, чтобы исключить самый верхний каталог в вашем дереве

find "$my_dir" -mindepth 1 -maxdepth 1 -type d -print0

Однако, поскольку у вас также есть -maxdepthограничение глубины, почему бы просто не использовать forцикл

for dir in "$my_dir"/*
do
    [[ -d "$dir" ]] || continue    # only directories
    echo "${dir/*\/}"              # just basename
done
4
30.05.2021, 16:49
2 ответа

Учитывая точное требование «один раз за 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 практически в одно и то же время.

5
28.07.2021, 11:28

Этот запустится fortuneтолько если не запущена другая оболочка zsh:

[[ "$(pidof zsh)" == *' '* ]] || fortune
2
28.07.2021, 11:28

Теги

Похожие вопросы