O redirecionamento não aparece como um argumento para um script de origem

1

Meu problema é que não consigo imprimir na tela quando escrevo um script bash

. myBashScript.sh < text.txt

Em myBashScript.sh , acabei de imprimir

echo $2

Mas, em vez de imprimir "text.txt", mostra uma "nova linha". Como tenho sabido, '<' é uma nova linha.

Por que $2 não text.txt ?

    
por cat_minhv0 14.09.2012 / 15:20

1 resposta

3

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.
    
por 14.09.2012 / 15:37