Como está executando um script como um executável diferente de executá-lo explicitamente por um shell?

1
  1. Em Um guia prático para comandos, editores e shell do Linux Programação Por Mark G. Sobell

    Although you can use bash to execute a shell script, this technique causes the script to run more slowly than giving yourself execute permission and directly invoking the script.

    Por que isso?

  2. Como está executando um script como um executável diferente de executá-lo por um shell explicitamente?
  3. Ambos seguem os mesmos passos que:

    A command on the command line causes the shell to fork a new process, creating a duplicate of the shell process (a subshell). The new process attempts to exec (execute) the command. Like fork, the exec routine is executed by the operating system (a system call). Because the command is a shell script, exec fails. When exec fails, the command is assumed to be a shell script, and the subshell runs the commands in the script. Unlike a login shell, which expects input from the command line, the subshell takes its input from a file—namely, the shell script.

por Tim 11.01.2016 / 20:10

1 resposta

1

Supondo que o script seja um script Bash (por exemplo, começa com #!/bin/bash ), então o autor está errado neste ponto. Quando você executa um script de shell diretamente, o kernel vê a linha #!/bin/bash no início e, em seguida, executa essa linha com o nome do arquivo do script como um parâmetro, ou seja, /bin/bash myscript.sh . Em outras palavras, o kernel está fazendo exatamente o que você faria para passá-lo para um shell explicitamente.

Agora, se o script começar com #!/bin/sh em vez de #!/bin/bash , haverá outra possibilidade. O Bash pode fornecer /bin/sh , mas não é necessário. Ele também prioriza recursos acima do tamanho ou da velocidade. Se um shell menor e mais rápido for seu /bin/sh , a execução do script diretamente usará esse shell mais rápido, e o script será executado mais rapidamente do que no Bash.

Isso acontece na prática com distribuições baseadas no Debian (por exemplo, Debian, Ubuntu, Mint). Eles tendem a usar um shell chamado dash para fornecer /bin/sh em vez do Bash, para tornar os scripts de inicialização mais rápidos.

Para ver o que sua distribuição faz, ls -l /bin/sh . É provavelmente um link simbólico para /bin/bash ou /bin/dash ou outro shell.

    
por 11.01.2016 / 20:33

Tags