-
-
Does the quote mean that if the script is executed in bash via command myscript, then
- bash will first assume it is an ELF and calls
execve()on it, and because it is a bash script not ELF,execve()call will fail,
Se o Bash encontrar um arquivo executável, primeiro ele assumirá que está em algum formato que o sistema operacional pode executar e call
execveon it . Caso isso seja bem-sucedido, isso ainda pode não ser um arquivo executável nativo ou ELF. Por exemplo, o recursobinfmt_miscdo Linux permite que muitos outros formatos executáveis sejam executados. Nesse caso específico, a chamadaexecveprovavelmente falhará.- bash will next execute
bash myscript?
O Bash usará seu subprocesso existente para executar o script dentro dele, reinicializando o ambiente de shell conforme necessário . Não há um processo adicional lançado ou
execchamada. - bash will first assume it is an ELF and calls
-
Compared to running a bash script via bash myscript in bash, running the script via myscript in bash will additionally have a failure call to
execve()on the script directly?Sim, suponho que sim, se você quer dizer "uma falha na chamada".
-
If yes, is
myscriptslower thanbash myscript? Why does "A Practical Guide to Linux Commands, Editors, and Shell Programming By Mark G. Sobell" say the opposite?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.
Conscientes das leis de calúnia prevalecentes, não comentarei a segunda parte dessa questão, mas até mesmo várias bibliotecas e & as chamadas de sistema não vão fazer uma diferença mensurável em comparação com o lançamento de todo um processo
bashe, em seguida, interpretar um script. Não consigo acessar a página em questão para encontrar qualquer contexto que você possa ter perdido. É quase certo que não está discutindo o caso sem graça, no entanto.
-
-
If a bash script
myscriptcontains a shebang#! /bin/bash, when it is executed in bash via commandmyscript,- is it executed in the same way as it is executed in bash via command
bash myscript?
Sim; em um caso,
bash myscriptéexeced diretamente pelo subprocesso e, no outro, o sistemaexecs/bin/bash myscript, assim que encontrar a linha shebang.- is it executed in the same way as the shebang were removed from the script and then the script were executed via command
myscript?
Na medida em que você pode razoavelmente detectar, sim. Nada disso importa. Estritamente, a função
main()debashnão é executada novamente neste caso, porque o subprocesso apenas se reinicializa internamente e é executado na outra situação. Você pode construir um cenário em que isso seja importante se você estiver realmente interessada, mas não vale a pena o esforço. - is it executed in the same way as it is executed in bash via command
Observe que essa é uma funcionalidade de Bash e outros shells executam scripts sem script com sh ou algum outro shell , em vez de bash ou de si próprios, conforme observado na outra pergunta que você vinculou. Também estamos assumindo que o seu shell interativo é o mesmo bash que o das suas linhas de shebang.