porque sh e ./ fornecendo saída diffent para o mesmo script

1
$ sh emp1.sh
Enter the pattern to be searched: 
$ ./emp1.sh
Enter the pattern to be searched: \c

Conteúdo do script emp1.sh

$ cat emp1.sh
#!/bin/bash
#emp1.sh: interactive version uses read to take input

echo "Enter the pattern to be searched: \c"
read pname
echo "Enter the file to be used: \c"
read flname
echo "searching for the pattern $pname from the file $flname"
grep "$pname" $flname
echo "Selected records are shown above"

Diga-me porque é a diferença na primeira linha porque \ c está na segunda linha.

$ sh emp1.sh
Enter the pattern to be searched: 
$ ./emp1.sh
Enter the pattern to be searched: \c
    
por Ishrar Ali 23.11.2013 / 09:28

2 respostas

3

Existem duas conchas diferentes na verdade. Um é /bin/bash e o outro é /bin/dash . E /bin/sh é na verdade um link de /bin/dash . Para verificar, escreva no terminal

which sh

você obterá a saída: /bin/sh

Em seguida, digite ls -l /bin/sh no terminal, que retornará algo como

lrwxrwxrwx 1 root root 4 May 16 20:23 /bin/sh -> dash

O que mostra o fato de que sh é um softlink de /bin/dash . você pode tentar mais which dash .

Na verdade, bash é sh com mais recursos e melhor sintaxe. Ambos têm quase os mesmos comandos, mas são diferentes.

O que está acontecendo aqui

Quando você estiver executando sh emp1.sh , o script será tratado por dash , mas quando você executar ./emp1.sh devido à linha shebang ( #!/bin/bash ) na parte superior do script bash shell tratará dele. Então você obtém um formato diferente na saída. Lembre-se de que bash tem alguma sintaxe melhorada.

    
por souravc 23.11.2013 / 10:49
-1

A saída é diferente porque você está usando dois programas diferentes.

No primeiro caso sh emp1.sh você inicia um programa chamado sh e diz para executar as instruções em emp1.sh. Esse programa é provavelmente o shell bourne (sh), um shell bourne again (bash) tentando emular o shell clássico (e, portanto, reagindo diferentemente de seu modo nativo), dash ou qualquer outra coisa. / p>

Quando você usa ./emp1.sh , tenta executar o script empt1.sh propriamente dito. Sua primeira linha contém um shebang e um interpretador ( #!/bin/bash ) informando que ele precisa usar o bash (e todos os seus recursos).

Isso significa que você usa um programa / modo diferente do primeiro. E você tem resultados diferentes.

Para verificar isso, tente um destes dois:

  • /bin/bash emp1.sh (que deve produzir a mesma saída que o ./emp1.sh)
  • Ou altere a primeira linha para #!/bin/sh .
por Hennes 23.11.2013 / 12:37