gio open не использует чистую среду

Вопрос или проблема

Страница справки 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. Это поведение вызывает вопросы, поскольку противоречит утверждению документации.

Причины, по которым переменные окружения могут оставаться

  1. Существующий процесс: Если приложение уже запущено, переменные окружения, установленные перед вызовом gio open, могут оставаться доступными для этого процесса. То есть, если приложение было активным до вызова gio open, оно не перезапускается и может унаследовать переменные окружения.

  2. Способы активации: gio open может использовать несколько механизмов для активации приложений, включая D-Bus. В некоторых случаях приложение поднимается в том же окружении, что и перед вызовом, что может объяснить присутствие ваших переменных.

  3. Отладка и состояние процесса: Когда вы выполняете команду и проверяете переменные окружения в процессе с помощью cat /proc/pidof xed/environ, вы фактически смотрите на переменные, уже существующие в процессе. Если xed (или любое другое приложение) был ранее запущен с этой переменной, то она останется доступной.

Что это значит?

С учётом вышеописанного, можно сделать вывод, что здесь нет ошибки в gio или её поведении. Это, скорее всего, связано с тем, как работают окружения Unix-подобных систем. При открытии приложения с помощью gio open, предпочтительное поведение — это игнорирование новых переменных окружения для нового процесса. Однако, при активации уже функционирующего приложения, оно унаследует переменные, установленные в оболочке, что может привести к ситуации, описанной вами.

Заключение

Если вы хотите убедиться, что переменные окружения не передаются в открываемое приложение, можете использовать другие подходы для тестирования, такие как запуск нового инстанса приложения или временное изменение переменных окружения в оболочке. В конечном итоге, текущее поведение не является ошибкой, а скорее особенностью управления процессами в Unix.

Вывод: для понимания работы приложения и команд, подобных gio open, важно глубже познать особенности управления процессами и окружением в вашей операционной системе.

Оцените материал
Добавить комментарий

Капча загружается...