如何在别名末尾使用bash别名?

问题描述

是否可以在使用别名的命令末尾使用别名。 完整的命令将是:

kubectl delete pod Nginx --grace-period=0 --force

这些是我的别名:

alias k=kubectl
alias gpf="--grace-period=0 --force"

我想将两个别名组合成这样:

k delete pod Nginx gpf

解决方法

别名不是宏;它替代命令。 --grace-period=0不是命令,“别名的组合”将不起作用。

此外,您的两个命令均未定义别名。别名由

定义
alias NAME='command to execute'

您缺少alias关键字。因此,您对gpfk的定义不是定义别名,而是定义shell变量。

不过,您对gpf的定义可能会很有用,因为您可以在其中使用它。

kubectl $gpf
,

以下shell函数具有您所要求的行为:

k() {
  local -a args=( kubectl )               # initialize argument list to "kubectl"
  for arg do                              # iterate over each funtion argument
    if [[ $arg = gpf ]]; then             # if that argument is "gpf"...
      args+=( --grace-period=0 --force )  # ...append the specific arguments we want
    else
      args+=( "$arg" )                    # otherwise,just append what we were given
    fi
  done
  "${args[@]}"                            # then run our list as a command.
}
,

k delete pod nginx gpf --> 这确实有效,但会引发错误。

如果您仔细注意,删除 pod 不会花费太多时间。

错误说没有名为“gpf”的 pod,不确定 kubectl 是否假定 gpf 是一个 pod,因为它已经替换了该值。