zshエイリアスでheredocを使用する

zshエイリアスでheredocを使用する

zshたとえば、別名としてheredocを使用したいと思います。

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

ただし、このエイリアスを実行するたびに、シェルはあたかも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。これは単なる例であると仮定しています。)

関連情報