Vi essa pergunta neste site e isso me levou a fazer essa pergunta. Eu quero saber no Unix falar qual é a diferença entre um executável e um script de shell?
Vi essa pergunta neste site e isso me levou a fazer essa pergunta. Eu quero saber no Unix falar qual é a diferença entre um executável e um script de shell?
Um executável refere-se a qualquer arquivo com o conjunto de bits executável que pode ser executado (mesmo se houver erros na execução real do programa).
Um script de shell é um tipo específico de executável que deve ser interpretado por um shell usando a #!
diretiva para especificar um intérprete.
Um script é um arquivo que:
Um script de shell é um script cujo intérprete é um shell . No mundo unix, "concha" refere-se à família de conchas que se assemelham à concha Bourne ; conchas modernas (cinzas, bash, ksh, zsh,…) estão em conformidade com o padrão de shell POSIX . De maneira mais geral, a palavra "shell" pode incluir outros intérpretes de comando, como csh, tcsh, fish,…
Um executável é qualquer arquivo que possa ser executado. Para ser efetivamente executável, um arquivo precisa ter duas propriedades:
ls -l
: o x
caractere deve estar presente na coluna de permissão.O formato do arquivo deve ser aquele que o sistema reconhece como executável. Formatos executáveis podem ser divididos em várias categorias:
#!
seguidos por um caminho para um arquivo. Para executar esse arquivo, o kernel executa o programa interpretador e passa o caminho para o script como argumento.Observe que ser um executável depende do sistema. Por exemplo, um binário amd64 Linux é executável em um sistema amd64 Linux, mas não em um sistema de 32 bits. Um binário para Android não é executável em uma instalação normal do Linux. Um executável do Windows só é executável no Linux se o Wine estiver presente. Um script que começa com #!/usr/local/bin/ruby
só é executável se houver um programa localizado em /usr/local/bin/ruby
.
Um script de shell geralmente é executável. Mas pode ser não executável, se você não tiver permissão para executá-lo. Você ainda pode interpretá-lo passando-o explicitamente ao intérprete (por exemplo bash /path/to/script
) - "interpretá-lo" é uma maneira elegante de dizer "executar".
shell-script:
Um script de shell é uma série de comandos que serão interpretados por um shell (geralmente sh ou um shell compatível com sh, às vezes outro).
O nome do script pode, mas NÃO precisa terminar em ".sh" ou ".bash" ou ".csh" etc (dando uma dica sobre o shell pelo qual ele deve ser iniciado).
Para maior clareza, assumirei: que o nome do script é script
e o shell em que ele deve ser lançado é bash
.
Uma maneira típica de iniciá-lo no shell seria: bash /absolute/path/to/the/script
ou bash ./relative/path/to/the/script
. Dessa forma, ele não precisa ter o bit executável definido, pois ele é lido apenas pelo bash, que então executa o conteúdo.
Também pode ser definido + x (executável) para permitir iniciá-lo diretamente da sua sessão atual do shell com: / absolute / path / to / the / script (ou ./relative/path/to/the/script). Cuidado: por padrão, quando iniciado dessa maneira, é iniciado através do shell digitado ou através de um shell posix (o comportamento depende do SO), portanto, pode não ser o shell pelo qual deveria ser executado. É por isso que você pode (e deve) especificar como a primeira linha do script: #! / Path / to / good / shell, que indica ao seu sistema operacional que esse script deve realmente ser iniciado por / path / to / good / shell.
executável:
Um executável é um arquivo que possui o bit "x" definido para o (s) usuário (s) / grupo (s) pelo qual deve ser iniciado. Pode ser tipicamente um "binário" ou um script.
Dica: file /some/file
pode informar mais sobre o conteúdo do arquivo. Experimente file /usr/bin/bash
ou file /etc/profile
veja alguns exemplos.