Eu não entendo o que você está tentando fazer aqui, mas o problema é que você está tentando executar myecho como um programa. Vamos dar uma olhada na linha relevante:
$2 < $3 > $1
Aqui, $2 é myecho , $3 é echo.in e $1 é file.log . Portanto, o que você está executando é:
myecho < echo.in > file.log
Com base na saída do seu script, você tem um arquivo chamado myecho no diretório atual (caso contrário, o script teria reclamado sobre o arquivo 2 não existente). No entanto, seu diretório atual aparentemente não está em sua $PATH . Portanto, quando você tenta executar myecho , o sistema procura por um executável com esse nome nos diretórios em seu $PATH , não encontra um e reclama.
A solução mais simples é chamar ./$2 em vez de $2 , o que diz ao seu shell para executar o arquivo chamado myecho no diretório atual e não procurá-lo naqueles em $PATH .
Como alternativa, você pode adicionar seu diretório atual ao seu $PATH . Adicione esta linha ao seu ~/.profile :
PATH="$PATH:"
O trailing : adiciona seu diretório atual (o que quer que seja) ao seu $PATH . Você terá que efetuar logout e login novamente ou manualmente originar .profile ( . ~/.profile ) para que as alterações entrem em vigor. Observe que isso pode ser perigoso em alguns casos em que, por exemplo, um invasor carregou um executável malicioso em seu diretório atual e o nomeou ls .