Если он у вас есть, используйте параметр -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
Учитывая точное требование «один раз за 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 практически в одно и то же время.
Этот запустится fortune
только если не запущена другая оболочка zsh:
[[ "$(pidof zsh)" == *' '* ]] || fortune