我想映射 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
您的基本想法是正确的,但需要做出一些改变:-
- 将选项放在第一位,包括
--no-check-certificate
,在任何 URL 之前。 - 为了避免任何可能的递归,在声明函数定义时,
wget
在函数体中用替换。这是可行的,因为是一个外部程序,因此它不知道 中的别名或函数定义。$(which wget)
which
bash
- 要传递完整的函数参数字符串,请用 替换
$1
。"$@"
这会扩展为完整的参数字符串,并使用双引号将参数括起来,以防止在嵌入空格上拆分参数。这适用于基于 Bourne 的 shell(sh
、ksh
、bash
等)。
这一切都导致了以下函数定义(使用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