bash - comando não encontrado [fechado]

1

Eu tenho um script

[pic@pic Desktop]$ cat skrypt.sh 
#!/bin/bash

awk '{sub(/#echo "Wstałem"/,"#echo \"Wstałem\""); print $0 > "skrypt.sh"}' skrypt.sh
awk '{sub(/awk/,"#awk"); print $0 > "skrypt.sh"}' skrypt.sh

[pic@pic Desktop]$

Eu corro o script

[pic@pic Desktop]$ ./skrypt.sh 
./skrypt.sh: line 5: h: command not found
[pic@pic Desktop]$ 

Por que recebe a mensagem?

./skrypt.sh: line 5: h: command not found

EDITAR:

Depois de executar o script, quero obter o resultado

#!/bin/bash

#awk '{sub(/#echo "Wstałem"/,"#echo \"Wstałem\""); print $0 > "skrypt.sh"}' skrypt.sh
#awk '{sub(/awk/,"#awk"); print $0 > "skrypt.sh"}' skrypt.sh

Este é apenas um exemplo. A ideia é que, em um script real, após a chamada ter sido comentada a linha acima.

    
por nowy1 24.01.2015 / 17:16

1 resposta

1

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.

    
por 24.01.2015 / 18:45

Tags