在 zsh 别名中使用heredoc

在 zsh 别名中使用heredoc

我想在zsh别名中使用heredoc,例如:

alias runthing="cd ~; date << HERE
date
HERE"

然而,每次我运行这个别名时,shell 都会表现得好像我没有终止heredoc,并显示以下内容:

➜  ~ runthing
heredoc>

在该行输入此处heredoc>即可完成命令,尽管我不想这样做,因此使用了别名。如果有什么区别的话,我正在使用 oh-my-zsh。

如何在 zsh 别名中正确使用heredoc?

答案1

这里的文档分隔符必须是别名中的分隔行zsh(它看起来确实像一个错误,因为您在按 Enter 键时添加了该分隔符),因此:

alias runthing='cd; date << HERE
date
HERE
'

但在这里,使用别名是错误的。例如考虑:

echo foo || runthing

因为alias只是代码文本替换的一种形式(别名首先是 csh 功能,csh 没有功能),所以变成

echo foo || cd; date...

这意味着即使成功date也会运行。echo

你最好在这里使用一个函数:

runthing() {
  cd && date << EOF
date
EOF
}

date(当然,鉴于不读取其标准输入,向定界符提供意义不大date,我只是假设,这只是为了示例)。

相关内容