Вопрос или проблема
Страница справки gio утверждает, что:
open LOCATION…
Открывает файлы с помощью приложения по умолчанию, зарегистрированного для обработки файлов этого типа.[…]
Переменные среды не будут установлены в приложении, так как это может быть уже существующий процесс, который активируется для обработки нового файла.
Конкретно:
Переменные среды не будут установлены в приложении
Тем не менее:
$ DEBUG=please_unset_me gio open test.txt
$ cat /proc/`pidof xed`/environ | xargs -0 -L1 | grep "DEBUG"
DEBUG=please_unset_me
Это ошибка или я что-то упустил?
Ответ или решение
Проблема, о которой вы упомянули, касается работы команды gio open
в контексте выставления переменных окружения для открываемого приложения. Для начала, давайте разберемся в деталях.
Описание поведения gio open
Согласно документации, команда gio open LOCATION...
предназначена для открытия файлов с помощью приложения по умолчанию, зарегистрированного для обработки таких файлов. Главный момент здесь заключается в том, что окружение переменных не устанавливается в запущенное приложение, так как оно может быть существующим процессом, и gio open
активирует его для обработки нового файла.
Важные моменты
В строке документации ясно указано, что переменные окружения не будут установлены в приложении. Тем не менее, в вашем примере по запуску следующей команды:
$ DEBUG=please_unset_me gio open test.txt
вы упоминаете, что переменная окружения DEBUG
все же видна в процессе, который обрабатывает файл test.txt
. Это поведение вызывает вопросы, поскольку противоречит утверждению документации.
Причины, по которым переменные окружения могут оставаться
-
Существующий процесс: Если приложение уже запущено, переменные окружения, установленные перед вызовом
gio open
, могут оставаться доступными для этого процесса. То есть, если приложение было активным до вызоваgio open
, оно не перезапускается и может унаследовать переменные окружения. -
Способы активации:
gio open
может использовать несколько механизмов для активации приложений, включая D-Bus. В некоторых случаях приложение поднимается в том же окружении, что и перед вызовом, что может объяснить присутствие ваших переменных. -
Отладка и состояние процесса: Когда вы выполняете команду и проверяете переменные окружения в процессе с помощью
cat /proc/
pidof xed/environ
, вы фактически смотрите на переменные, уже существующие в процессе. Еслиxed
(или любое другое приложение) был ранее запущен с этой переменной, то она останется доступной.
Что это значит?
С учётом вышеописанного, можно сделать вывод, что здесь нет ошибки в gio
или её поведении. Это, скорее всего, связано с тем, как работают окружения Unix-подобных систем. При открытии приложения с помощью gio open
, предпочтительное поведение — это игнорирование новых переменных окружения для нового процесса. Однако, при активации уже функционирующего приложения, оно унаследует переменные, установленные в оболочке, что может привести к ситуации, описанной вами.
Заключение
Если вы хотите убедиться, что переменные окружения не передаются в открываемое приложение, можете использовать другие подходы для тестирования, такие как запуск нового инстанса приложения или временное изменение переменных окружения в оболочке. В конечном итоге, текущее поведение не является ошибкой, а скорее особенностью управления процессами в Unix.
Вывод: для понимания работы приложения и команд, подобных gio open
, важно глубже познать особенности управления процессами и окружением в вашей операционной системе.