Comportamento muito tenso. Mas há uma lógica por trás.
bash
lê o script linha por linha. A primeira instrução awk
apenas grava o arquivo skrypt.sh
new, com o mesmo conteúdo, porque não há nada para substituir.
A segunda instrução awk
substitui awk
por #awk
(substituição única). Então, adiciona um caractere. Então bash
lê o resto do arquivo. O deslocamento é posicionado no final da linha (com o segundo awk
declaração, linha 4). Mas essa linha agora é um pouco mais longa (um caractere). Então o bash lê o resto da linha, que é um único h
. Isso é encadeado como um comando (porque estamos em um script bash
e termina com uma nova linha). E h
, claro, não é um comando válido, daí a mensagem de erro.
Para conseguir o que você quer (além de que seu script é muito precário) adicione um caractere mais no final da linha 4, que não pode ser interpretado como um comando, um espaço ( ) por exemplo.
Por último, mas não menos importante:
You shall not edit a scripts within itself.