Diferença entre “bash executable” e “bash -c executable”

3

Meu entendimento é que bash -c file significa a mesma coisa que estar em um shell bash interativo e chamar file , onde bash file significa interpretar o arquivo usando o bash (como se fosse um shell script). Isso é exato? Esta é a razão pela qual você não pode executar bash <executable> porque ele tentará interpretar o arquivo como um script de shell em vez de bifurcar e executar o arquivo exec?

    
por Gregg Leventhal 15.01.2015 / 17:05

1 resposta

3

Primeiro, da documentação do bash :

-c string

Read and execute commands from string after processing the options, then exit. Any remaining arguments are assigned to the positional parameters, starting with $0.

Portanto, quando você fornecer a opção -c , bash tratará a sequência após -c como uma sequência de comandos e executará esses comandos no ambiente do processo filho. Portanto, quando você chamar bash -c file , bash treat file como um comando, localize-o procurando na variável de ambiente PATH . Se file for encontrado, execute-o, caso contrário, o erro de comando não encontrado será gerado.

Quando você chama bash file , bash simplesmente trata file como um script de shell , leia e execute comandos a partir de file e saia. Mais uma vez, em documentação do bash :

If arguments remain after option processing, and neither the -c nor the -s option has been supplied, the first argument is assumed to be the name of a file containing shell commands (see Shell Scripts). When Bash is invoked in this fashion, $0 is set to the name of the file, and the positional parameters are set to the remaining arguments. Bash reads and executes commands from this file, then exits. Bash’s exit status is the exit status of the last command executed in the script. If no commands are executed, the exit status is 0.

Então, sua compreensão está certa.

    
por 15.01.2015 / 18:18

Tags