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
dir2e 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.