Shell

如何將參數放入 BROWSER 變數中?

  • December 3, 2018

我喜歡能夠做到export BROWSER="lynx -cfg=~/.lynx.cfg"。我直接試過這個,我也試過設置一個 alias alias lynx="lynx -cfg=~/.lynx.cfg",但這些都沒有用。(這意味著使用此變數啟動瀏覽器的工具仍然忽略我的配置文件或根本沒有啟動瀏覽器。)

$BROWSER被多個實用程序理解為您選擇的網路瀏覽器。

根據實用程序,預計它將包含:

  1. 執行檔的路徑或名稱
  2. 單詞列表,其中第一個是路徑或名稱,其他單詞是初始參數列表。如果幸運的話,它還會理解某種類似於 shell 的引用形式。
  3. (非常不可能,而且這是非常不明智的做法)shell 命令行的開始。

如果您是第一種情況,我希望您嘗試使用的實用程序抱怨不存在的"lynx -cfg=~/.lynx.cfg"命令。

在第三種情況下,請注意 shell 不會擴展~in -cfg=~/.lynx.cfgzsh只有在magicequalsubst啟用該選項時才會這樣做。如果左側的內容看起來像一個有效的變數名並且它不在 POSIX 模式下,則僅在 a之後bash擴展。~``=``=

但是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不包含空格或引號(或外殼特殊的其他字元))

無論如何,您應該能夠定義$BROWSER為將正確參數傳遞給的腳本lynx,例如:

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

並將其用作您的$BROWSER.

順便說一句,如果您$HOME~字元開始,那將是愚蠢lynx的,這就是為什麼單獨lynx處理這些不是一個好主意~

引用自:https://unix.stackexchange.com/questions/483602