Você está confundindo argumentos e entradas padrão. Dados de tubulação para um programa não são equivalentes a dar argumentos de linha de comando.
No seu primeiro caso, você não está transmitindo argumentos para o seu script, apenas alimentando os dados através de seu fluxo de entrada padrão. Portanto, $1
não é definido durante toda a duração do script.
A primeira invocação de more
, portanto, não possui parâmetro e exibe a entrada padrão. Isso exibe o que você tinha canalizado lá ( dir1
, como texto). O echo
subseqüente imprime apenas uma nova linha, pois não obtém nada para imprimir, e o último more
não tem mais nada para imprimir - a entrada padrão foi "drenada" pela primeira.
No segundo caso, você passa um argumento. Então $1
tem o valor dir2
no script. A mesma coisa acontece, exceto que o primeiro more
ambos:
- páginas por meio da entrada padrão
- tenta exibir o arquivo
dir2
e erros, pois esse é um diretório
O eco faz o que é esperado, dado que $1
contém dir2
e os últimos% more
apenas erros em dir2
- não tem nada a ler da entrada padrão.