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