Diferentes maneiras de executar um binário? [fechadas]

0

Existem mais maneiras de executar binários Unix usando um terminal (linha de comando)? Usando echo como exemplo:

$ /bin/echo "test"
test

$ cd /bin/
$ ./echo "test"
test

$ eval echo "test"
test
    
por user321532 18.11.2018 / 04:48

2 respostas

1

Existem muitas maneiras diferentes de expressar código em uma linha de comando shell ou em uma linha de script de shell que pode resultar na execução de um binário. Todos eles apenas chegam ao ponto de executar um comando de shell. O shell tentará executar um arquivo se o comando fizer referência a um arquivo. Essa tentativa será bem-sucedida se você tiver permissão para executar o arquivo. O arquivo pode ser um executável binário ou um script que se refere ao seu intérprete na primeira linha (que começa com "#!") Ou o arquivo pode ser apenas dados simples como texto. Se for executável nesse ponto, será executado ou interpretado. O shell tem várias maneiras de expressar um comando. As possibilidades são infinitas.

    
por 18.11.2018 / 05:44
1

Por favor, note que como Sparhawk apontou nos comentários a>, os dois primeiros exemplos estão basicamente fazendo o mesmo (eles invocam o programa usando seu caminho em vez de fazer uma pesquisa de caminho) e seguindo essa lógica as maneiras de executar um determinado programa são virtualmente infinitas.

De qualquer forma, eu diria que existem pelo menos 4 maneiras diferentes de executar programas [1] de um shell:

  • Shell builtins : alguns comandos, como echo em si no Bash, são implementados no shell, portanto, o utilitário externo correspondente, se existir, não é invocado.

    $ echo foo
    foo
    
  • Pesquisa de caminho : quando o shell pesquisa o programa desejado em cada um dos diretórios incluídos na variável de ambiente PATH .

    $ cat <<< foo
    foo
    
  • Chamada direta : quando o programa é chamado usando seu caminho completo / relativo.

    $ /bin/echo foo
    foo
    
    $ ../../bin/echo foo
    foo
    
  • Chamada indireta : quando o programa é invocado por outro programa (interno ou externo).

    $ eval echo foo
    foo
    
    $ command echo foo
    foo
    
    $ sh -c 'echo foo'
    foo
    

1. Eu sei que você disse binários . Eu usei um termo mais geral porque os scripts também podem ser executados a partir de um shell.

    
por 18.11.2018 / 06:51