Eu presumo que você esteja digitando
./myBashScript.sh < text.txt
com uma barra invertida.
Quando você executa ./myBashScript.sh < text.txt
, seu shell interativo captura o < text.txt
e o interpreta como uma instrução especial - em particular, ele interpreta sua linha de comando para significar que ele deve executar myBashScript.sh com entrada padrão conectada ao texto .TXT. Seu shell então remove < text.txt
da linha de comando antes de passar o controle para myBashScript.sh. Portanto, no que diz respeito ao seu shell script, ele recebe zero argumentos e $2
está vazio. Seu script traduz simplesmente para
echo
que imprime uma nova linha.
Se você quiser realmente imprimir o nome do arquivo, considere
#!/bin/sh
echo $1
que você pode executar:
$ ./myShellScript text.txt
text.txt
Se, por outro lado, você quiser imprimir o conteúdo do arquivo, você deve usar cat (1); seu script de shell deve ser
#!/bin/sh
cat $1
que você pode executar:
$ ./myShellScript text.txt
Hello from text.txt, a file containing a bunch of test strings.