映射 wget 以便自动使用 --no-check-certificate

映射 wget 以便自动使用 --no-check-certificate

我想映射 wget 以便--no-check-certificate自动使用。这是我迄今为止最好的尝试:

function wget() { wget @1 --no-check-certificate }

效果不太好。首先,我需要能够接受任意数量的参数。我也不确定这是否是“覆盖”的正确方法wget,它似乎太过自我引用。有什么好方法可以让它wget自动使用--no-check-certificate

答案1

只需使用一个alias

别名优先于内置函数和应用程序,因此您可以覆盖应用程序。

只需将此行添加到您的.bashrc.bash_aliases类似文件中:

alias wget='wget --no-check-certificate'

别名将被扩展它被执行。之后的所有内容wget都将传递给命令。只有这样它才会像往常一样被执行。这是可能的,因为别名扩展是由 shell 完成的,调用命令、搜索路径等是由系统(可能是内核)完成的。

如果你想将此行为应用于任何 wget例如,即使它被另一个应用程序调用,也使用.wgetrc并添加此行:

check-certificate = off

答案2

您的基本想法是正确的,但需要做出一些改变:-

  1. 将选项放在第一位,包括--no-check-certificate,在任何 URL 之前。
  2. 为了避免任何可能的递归,在声明函数定义时,wget在函数体中用替换。这是可行的,因为是一个外部程序,因此它不知道 中的别名或函数定义。$(which wget)whichbash
  3. 要传递完整的函数参数字符串,请用 替换$1"$@"这会扩展为完整的参数字符串,并使用双引号将参数括起来,以防止在嵌入空格上拆分参数。这适用于基于 Bourne 的 shell(shkshbash等)。

这一切都导致了以下函数定义(使用bash语法):

wget() { $(which wget) --no-check-certificate "$@"; }

使用此功能,您可以wget根据需要使用任意数量的选项和参数进行调用,并且--no-check-certificate始终包含在运行字符串中。您可以将其添加到 shell 的启动文件中(例如~/.bashrc)。

答案3

如果你想使用 Wget,那么为什么不使用它的配置文件呢?不要乱用 bash 配置文件,那很笨拙。

Wget 有一个配置文件,对于一个用户来说通常:

$HOME/.wgetrc

所有用户的位置可能是 /usr/local/etc/wgetrc 或 /etc/wgetrc,具体取决于您的安装。

每次调用时禁用 SSL 证书验证获得(您知道这是不安全的)您可以在该文件中使用以下指令:

check_certificate = off

wget 的 gnu 手册

相关内容