exec – запускает процесс в контексте данного шелла, а не суб-шелла
Ерунду-то не пиши. Это exec без аргументов. Ничего он не делает, кроме открытия файла и назначения ему дескриптора 8 (или 9) с NOCLOEXEC, через которые потом работает flock.
A вообще-то это всё подробно описано в man-ах (bash(dash,mksh) и flock), гуглить ничего не надо, тем более на LOR-е спрашивать.
Ваш УМВР будет работать если по пути «$XDG_DATA_HOME»/mail/iiser/ нет файликов, начинающихся на любую букву из слова Gmail и заканчивающихся на .Trash
То что не работает конкретный пример с touch — это какой-то новый подход к стандартам, ибо символы *?[] как раз и сделаны, чтобы выбирать из имеющихся файликов.
Окей. А почему она всё-таки может быть пуста? Она в стандарте обязательна или нет? Система-то достаточно новая, не дебиан стейбл, чай. Какой-нибудь freedesktop-овский пакет не установлен?
Ну и если ближе к ОП — речь шла про баш-скрипты, там код, который сначала проверяет переменную, потом к чему-то откатывается, начинает выглядеть угрожающе. Баш и так не самый читаемый язык… :)
Да, я понял ошибку, согласен. Тем не менее, то, о чем я говорю, смысла от этой ошибки не теряет, хардкодить имя пользователя (или еще что-либо) в дотфайлах – к беде.
Вы явно ошиблись адресатом. Мне на все эти XDG_XXX глубоко положить. Я вообще сюда не собирался писать, пока не наткнулся в коментах на то, что разражает так, что кушать не могу. Ибо в записи v="$P"/add феерично всё. Там где надо ставить кавычки, там не стоят, почему надо вообще — не знают, а там где не надо, там ставят. И так и живут с этим и даже что-то возражают.