bash中alias不生效
alias不生效 在修改一段shell脚本时,需要将函数里面的kubectl命令替换为kubectl --insecure-skip-tls-verify=True,使得脚本中的所有kubectl命令执行时会自动加上选项--insecure-skip-tls-verify=True。首先想到的就是利用alias别名,示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 function func1(){ ... kubectl get deployment -n ${NAMESPACE} ${CI_PROJECT_NAME} # 不生效 ... } ... function main(){ ... alias kubectl="kubectl --insecure-skip-tls-verify=True" kubectl get ns # 不生效 ... } 但是用上面方式改来改去kubectl选项不生效。 原因是:alias不能直接在同一个命令解析单元里面定义并使用,必须在定义alias的命令解析单元解析执行完成后,才能生效。 因此,在函数里面使用alias时,可以用下面函数的方式: 1 2 3 4 function main(){ kubectl() { /usr/bin/kubectl --insecure-skip-tls-verify=True "$@"; } kubectl get ns # 此处等同于kubectl加了--insecure-skip-tls-verify=True选项 } 当然也可以把alias放在函数外、脚本的前面。 命令解析单元 解析单元就是一组完整的命令(包括组合命令、循环等)后面跟上换行符。 shellcheck项目的示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # 单个命令跟换行,一个解析单元 unit 1 # 俩命令在同一解析单元,之间无换行 unit 2; unit 2; # 大括号的同一个解析单元 { unit 3 unit 3 } # 也是同一个解析单元,在大括号组之间无换行 { unit 4 }; { unit 4 } 上面示例中,unit1中定义的别名,只能在unit2及后面才能使用。...