我想在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
,我只是假设,这只是为了示例)。