获取一个包含管道的zsh别名以执行

3

我希望有一个命令可以在Mac上使用zsh快速将当前的tmux窗口布局复制到剪贴板。我想到了以下方法:

tmux list-windows | awk '{print $7}' |  sed 's/\]$//' | pbcopy

当我从命令行运行此命令时,它可以完美地工作,并输出以下内容:
d97b,135x32,0,0[135x16,0,0{87x16,0,0,0,47x16,88,0,1},135x15,0,17{87x15,0,17,2,47x15,88,17,3}]

然而,我似乎无法将其作为别名运行。如果我添加以下行:
alias layout="tmux list-windows | awk '{print $7}' |  sed 's/\]$//' | pbcopy"

当我运行layout命令时,向我的.zshrc文件添加内容后,命令不按预期工作。它输出完整的tmux list-windows命令,并将单词layout替换会话名称:
0: layout* (4 panes) [135x32] [layout d97b,135x32,0,0[135x16,0,0{87x16,0,0,0,47x16,88,0,1},135x15,0,17{87x15,0,17,2,47x15,88,17,3}]] @0 (active)

我做错了什么?

谢谢。

3个回答

6

alex_i是正确的,如果您转义$7,则所有内容都有效。

别名layout ="tmux list-windows | awk '{print \$7}' | sed 's/\]$//' | pbcopy"

请注意$7之前的反斜杠。


5
不要使用别名,而应该使用函数:
layout () {
    tmux list-windows | awk '{print $7}' | sed 's/\]$//' | pbcopy
}

那么您就不需要担心引用的问题了。

这是一个非常好的方法。以前没有研究过zsh函数 - 它们真的很有用! - Small Hadron Collider

5

你的'$7'在.zshrc加载时被解释了吗?这可能是问题所在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接