![zsh - 如何正确创建长命令内联扩展的快捷方式](https://linux22.com/image/195210/zsh%20-%20%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E5%88%9B%E5%BB%BA%E9%95%BF%E5%91%BD%E4%BB%A4%E5%86%85%E8%81%94%E6%89%A9%E5%B1%95%E7%9A%84%E5%BF%AB%E6%8D%B7%E6%96%B9%E5%BC%8F.png)
我试图找出创建命令片段的内联扩展的最佳方法。 “长形式”就像:
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
注:
%
是提示。不要输入那个。