zsh - 如何正确创建长命令内联扩展的快捷方式

zsh - 如何正确创建长命令内联扩展的快捷方式

我试图找出创建命令片段的内联扩展的最佳方法。 “长形式”就像:

kubectl get pods --show-labels

或者

 kubectl get po -o custom-columns=NAME:'{.metadata.name}',OWNER:'{.metadata.ownerReferences[0].name}',OWNER_KIND:'{.metadata. ownerReferences[0].kind}'

首先,我使用了这个:

function sl(){
  echo " --show-labels"
}

  kubectl get pods `sl`

这有效,但以下无效:

function kown(){
  echo "custom-columns=NAME:'{.metadata.name}',OWNER:'{.metadata.ownerReferences[0].name}',OWNER_KIND:'{.metadata.ownerReferences[0].kind}'"
}

kubectl get po -o `kown`

error: unexpected path string, expected a 'name1.name2' or '.name1.name2' or '{name1.name2}' or '{.name1.name2}'

为什么第二个不起作用?除了反引号和函数之外,还有更好的方法吗?我在考虑环境变量但不确定。感谢您的任何想法。

答案1

首先,在 中zsh,它更容易使用全局别名对于这类事情:

alias -g sl='--show-labels'
alias -g kown='custom-columns=NAME:{.metadata.name},OWNER:{.metadata.ownerReferences[0].name},OWNER_KIND:{.metadata. ownerReferences[0].kind}'

其次,如果使用'单引号' 里面 "双引号",然后包含单引号字面上地在您传递给命令的字符串中。那不是你想要的。原始命令行中的单引号是为了防止 shell 执行以下操作扩张在字符串的几个子字符串上。请注意我是如何包装的全部的单引号中的字符串。这可以防止 shell 在字符串中的任何位置对字符串进行任何扩展。这比仅引用某些子字符串(也更少输入)安全得多。

最后,您只需在命令行的任意位置键入全局别名即可使用它们,没有引号:

% kubectl get pods sl
% kubectl get po -o kown

注:%是提示。不要输入那个。

相关内容