-
-
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
execve
on it . Caso isso seja bem-sucedido, isso ainda pode não ser um arquivo executável nativo ou ELF. Por exemplo, o recursobinfmt_misc
do Linux permite que muitos outros formatos executáveis sejam executados. Nesse caso específico, a chamadaexecve
provavelmente 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
exec
chamada. - 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
myscript
slower 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
bash
e, 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
myscript
contains 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
éexec
ed diretamente pelo subprocesso e, no outro, o sistemaexec
s/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()
debash
nã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.