如何将参数放入 BROWSER 变量中?

如何将参数放入 BROWSER 变量中?

我喜欢能够这样做export BROWSER="lynx -cfg=~/.lynx.cfg"。我直接尝试了,也尝试设置了别名alias lynx="lynx -cfg=~/.lynx.cfg",但这些都没有用。(这意味着使用此变量启动浏览器的工具仍然忽略了我的配置文件或根本没有启动浏览器。)

答案1

$BROWSER被许多实用程序视为您选择的网络浏览器。

根据实用程序,预计它将包含:

  1. 可执行文件的路径或名称
  2. 单词列表,其中第一个是路径或名称,其他单词是初始参数列表。如果幸运的话,它还会理解某种形式的引用,类似于 shell 的作用。
  3. (可能性很小,而且是非常不明智的事情)shell 命令行的开始。

如果您处于第一种情况,我希望您尝试使用的实用程序会抱怨不存在的"lynx -cfg=~/.lynx.cfg"命令。

在第三种情况下,请注意 shell 不会扩展~in -cfg=~/.lynx.cfg。仅当启用zsh该选项时才会执行此操作。仅当 a 左边的内容看起来像有效的变量名且不是 POSIX 模式时,才会在 a 之后展开 a 。magicequalsubstbash~==

然而lynx(至少我的系统上的版本 2.8.9dev.16)似乎~本身就理解为一个人的主目录,所以我希望你的主目录适用于第二类和第三类的实用程序。

$ BROWSER='echo -cfg=~' sensible-browser foo
-cfg=~ foo

所以要么你的浏览器是第四类别忽略除第一个单词以外的任何内容,或者仅提示您的浏览器是什么;或者你的版本lynx不理解~为“家”的意思。

运行您的实用程序以strace -fe execve the-utility查看它尝试执行的内容。

如果您的版本lynx~视为家庭,您可以定义$BROWSER为:

export BROWSER="lynx -cfg=$HOME/.lynx.cfg"

(假设$HOME不包含空格或引号(或 shell 特有的其他字符))

无论如何,您应该能够定义$BROWSER一个将正确参数传递给的脚本lynx,例如:

#! /bin/sh -
exec lynx -cfg="$HOME/.lynx.cfg" "$@"

并将其用作您的$BROWSER.

顺便说一句,如果您从字符$HOME开始,那会很愚蠢,这就是为什么单独处理这些字符并不是一个好主意。~lynxlynx~

答案2

我不认为你可以,但是你可以尝试:

必须使用绝对路径。

export BROWSER='/home/username/lynx.sh'

在主目录中创建新文件 lynx.sh。

#!/bin/bash
linx -cfg=/home/username/.lynx.cfg

使其可执行。

然后:

Launching Browser should launch lynx.
or
./lynx.sh

和/或:

类型:

whereis lynx

在下一步中使用。

编辑 bash_aliases:

必须使用 lynx.cfg 的绝对路径
必须使用 lynx 的绝对路径(如果不在 /usr/bin/ 中)

alias=lynx='/path/to/lynx -cfg=/home/username/.lynx.cfg'

如果路径包含特殊字符,则必须使用“”。

相关内容