Как установить переменную по умолчанию для одной команды с переменными окружения?

Как установить переменную по умолчанию для одной команды с переменными окружения?

Мне нужно переопределить браузер по умолчанию для одного процесса. Этот процесс запускается вручную из скриптов npm. Чтобы добиться этого программно, я решил переопределить BROWSERпеременную окружения прямо перед скриптом. Но это не работает. Он крадет открытие общесистемного браузера по умолчанию. Я пробовал с xdg-open, но это тоже не работает.

Короче говоря, я хочу, чтобы следующая команда открывала указанный URL в указанном браузере, а не в браузере по умолчанию.

BROWSER='path to desired browser' xdg-open 'any url'

PS: Хочу рассказать немного больше о своей проблеме. Я использую Firefox в качестве браузера по умолчанию на всех своих машинах и довольно привык к нему. Но недавно, отлаживая одно веб-приложение, я понял, что некоторые точки останова не используются инструментами разработки Firefox. Я установил Chromium, и его отладчик работал так, как и ожидалось. Я использую storybook для разработки и хотел бы открыть его в Chromium, при этом используя Firefox в качестве переменной по умолчанию для обычного повседневного использования.

решение1

Мне нужно было что-то подобное, но не ограничиваясь ситуациями, в которых уважается $BROWSER, так как xdg-openчасто использовался неправильный профиль браузера.

Вот обходной путь с использованием следующих компонентов:

  • Скрипт, который загружает BROWSERпеременную и запускает нужный браузер.
  • Переопределение текущего .desktopпрофиля по умолчанию путем копирования его в ~/.local/share/applicationsкаталог.
  • Измените Execоператоры в .desktopфайле, чтобы использовать пользовательский скрипт.
  • Установите BROWSERдля переменной разумное значение по умолчанию в оболочке входа, чтобы иметь запасной вариант.

Шаг за шагом

~/binЯ добавил в свой каталог скрипт под названием custom-browser, который выглядит так:

$BROWSER "$@"

Во-вторых, найдите текущий .desktopпрофиль с помощью:

xdg-settings get default-web-browser

Это дало мне firefox.desktop, который я скопировал в свой домашний каталог пользователя:

cp /usr/share/applications/firefox.desktop ~/.local/share/applications/firefox.desktop

Я изменил Execоператоры ~/.local/share/applications/firefox.desktopдля запуска /home/{user}/bin/custom-browser.

Теперь я могу использовать:

BROWSER='chromium' xdg-open 'https://startpage.com'
BROWSER='firefox' xdg-open 'https://startpage.com'

Чтобы открыть разные браузеры на основе BROWSERпеременной. Надеюсь, это вам как-то поможет.

Мое использование

я используюdirenv[1] для установки BROWSERпеременной на основе каталога, например, рабочие каталоги используют рабочий профиль для моего браузера.

Другой способ — запуск приложений, чтобы BROWSER=hardened-firefox signal-desktopзаставить приложение открывать ссылки в определенном браузере.

Примечания

  • Скрипт необходим, поскольку .desktopфайл не загружает переменные среды, поэтому добавление Exec=$BROWSER %uнапрямую не работает.
  • BROWSERВместо оболочки входа можно задать резервный вариант в скрипте.
  • Можно написать пользовательский .desktopфайл и изменить значение по умолчанию с помощью xdg-settings/ xdg-mimeвместо того, чтобы переопределять значение по умолчанию; мне показалось проще сделать все «правильно» с помощью переопределения.
  • При использовании браузеров, которые не используют URL в качестве первого позиционного параметра, .desktopможет быть проще настроить его и работать с ним в скрипте.
  • Если .desktopпрофиля нет в /usr/share/applicationsили переопределение в $HOME/.local/share/applicationsне работает, попробуйтеальтернативные пути[2] или обратитесь к документации вашего дистрибутива.

Ссылки

  1. https://direnv.net/
  2. https://specifications.freedesktop.org/mime-apps-spec/latest/ar01s02.html

решение2

export BROWSER='path to desired browser' && xdg-open 'any url'должно сработать.

Связанный контент