cat < "$x" <<-- EOL
Eu não acho que seja um erro de sintaxe, ele é tomado como um documento aqui delimitado pela string -
( here-docs aceitam apenas um traço opcional ), seguido de EOL
como um argumento normal para cat
. Em outras palavras, é o mesmo que
cat EOL < "$x" <<--
que é o mesmo que
cat EOL <<--
desde que você esteja redirecionando a entrada para cat
duas vezes. Este último entra em vigor, embora cat
não tente ler seu stdin
aqui, já que ele é dado (o que ele acha que é) um nome de arquivo também.
Eu acho que o que você quer é
cat > "$x" <<-EOF
blah
EOF