Diferença entre comandos no script bash e comandos no terminal

13

Existem diferenças entre os comandos que você digita no terminal e os comandos que você inclui em um script?

jth41
fonte
Absolutamente não é uma pergunta idiota! Confira isso (primeiro), depois isso e isso .
Emanuel Berg

Respostas:

7

Seu terminal executa um shell (provavelmente bash), que solicita seus comandos e os executa.

Além deste modo interativo, você também pode usar seu shell para executar comandos de um arquivo. Para executar os comandos no seu arquivo, você pode chamar o shell diretamente como bash scriptou pode iniciar seu arquivo com um "shebang" #!/bin/bashe torná-lo executável ( chmod +x script). Em seguida, você pode tratar o script como um binário e executá-lo, por exemplo, ./scriptou colocá-lo em um local em que o shell o esteja procurando. ( echo $PATH)

Provavelmente o seu shell interativo e o shell usado para executar é bash. Da perspectiva de um "primeiro dia de aprendizado do Linux", o bash funciona exatamente da mesma maneira nos dois modos. - Muito depois, você pode tropeçar em pequenas diferenças. Se você realmente quiser saber mais detalhadamente, sugiro ler man bashe pesquisar lugares que mencionem "interativo". (Você pode pesquisar uma página de manual pressionando /.)

Uma coisa importante a ser observada é que o script é executado como um novo processo. Isso significa especialmente que as variáveis ​​definidas no script não são visíveis no shell de chamada.

$ export a=1
$ echo $a
1
$ bash -c 'echo $a;a=2;echo $a' # change the value in a script
1
2
$ echo $a # value not changed here
1
$ 

Sem a exportação anem é visível o script interno.

michas
fonte
1

Em geral, a resposta seria "não", os comandos no shell são os mesmos nos scripts, na sintaxe e na semântica.

Mas existem várias pequenas nuances relacionadas à configuração do ambiente (quais variáveis ​​são usadas e o que são definidas).

  • o shell interativo de escolha para Linux é bash, mas scripting muitas vezes usa outros intérpretes ( sh, que é um antecessor do bash, kshque está a par com bash), então você tem que levar em conta o shell é usado (o nome atual shell s tradicionalmente é mantido em variável SHELL, tente digitar echo $SHELL).

  • pode haver diferenças na configuração do mesmo intérprete para a sessão interativa e para a execução do script.

Dmytro Sirenko
fonte
-1

Não. Um script é uma lista de comandos que você pode digitar no terminal.

Você pode colar a totalidade de um script no terminal e o resultado será o mesmo que executá-lo.

Inversamente, você pode "salvar" os comandos do terminal dentro de um arquivo, transformá-lo em um script reutilizável e compartilhá-lo com sua família e amigos.

Mathieu J.
fonte
4
Não. Colar o conteúdo é equivalente a obter o script. Isso mudará todos os tipos de opções no shell atual, que não seriam alterados simplesmente executando o script.
Michas
você está certo. mas no que diz respeito a suas perguntas. Eu acho que podemos dizer que é bem parecido. mas sim, traduzir o que michas disse em termos noob'er. colar o conteúdo do script é equivalente a fazer source script_file. que editará os vars ENV no contexto atual. enquanto estiver executando o script ./script_file, não modificará o ENV, a menos que exportseja usado explicitamente.
Mathieu J.
1
Não. Mesmo exportassim, não é possível que um script modifique quaisquer variáveis ​​do shell de chamada. O mesmo vale para coisas como PWD, aliases definidos, funções e coisas assim. Eles podem ser alterados apenas de forma interativa ou através da busca de um arquivo. Mas sim, isso provavelmente não é nada que alguém tropeçará no primeiro dia. :)
michas 27/12/12
1
@michas: Bem, ainda é melhor dar a descrição correta. Se o iniciante é ambicioso e tem hábitos de trabalho, ele ou ela vai entender rapidamente. Se tentarmos contar a história da criança, ficaremos tropeçando e causar uma impressão incompreensível - além disso, o iniciante pode voltar mais tarde. Embora eu não me considere um iniciante, há muitas coisas que não sei e ficaria insultado se alguém retivesse alguma coisa respondendo minhas perguntas porque "você ainda não chegou, júnior".
Emanuel Berg