如何使用环境变量为单个命令设置默认变量?

如何使用环境变量为单个命令设置默认变量?

我需要覆盖单个进程的默认浏览器。此进程从 npm 脚本手动启动。为了以编程方式实现此目的,我决定BROWSER在脚本之前覆盖环境变量。但这不起作用。它会窃取打开系统范围的默认浏览器。我尝试过xdg-open,但它也不起作用。

简而言之,我希望以下命令在提供的浏览器中打开给定的 URL,而不是在默认浏览器中。

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

PS:再多说一点我遇到的问题。我在所有机器上都使用 Firefox 作为默认浏览器,并且已经习惯了。但最近,在调试一个 Web 应用程序时,我发现 Firefox 开发工具没有使用一些断点。我安装了 Chromium,它的调试器工作正常。我使用 storybook 进行开发,并希望在 Chromium 中打开它,同时将 Firefox 用作日常使用的默认变量。

答案1

我需要类似的东西,但不仅限于尊重的情况$BROWSER,因为xdg-open会经常使用错误的浏览器配置文件。

以下是使用以下组件的解决方法:

  • BROWSER加载变量并启动正确浏览器的脚本。
  • 通过将当前默认.desktop配置文件复制到~/.local/share/applications目录来覆盖它。
  • 更改文件Exec中的语句.desktop以使用自定义脚本。
  • BROWSER在登录 shell 中将变量设置为合理的默认值,以便进行回退。

一步步

~/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在脚本中而不是登录 shell 中设置后备。
  • 可以编写自定义文件并使用/.desktop更改默认值,而不是覆盖默认值;我发现使用覆盖更容易“正确”地完成它。xdg-settingsxdg-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'应该可以解决问题。

相关内容