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.