Se você inserir ksh script_name
, ele executará ksh
com o argumento script_name
. Isso significa que será executado por ksh. O shebang só importa ao executar o script explicitamente (por exemplo, ./script_name
).
O operador shebang é usado para dizer qual shell será usado para executar o script. o que acontecerá no seguinte caso:
#!/bin/bash
se eu digitar 'ksh script_name', o que acontecerá?
Se você inserir ksh script_name
, ele executará ksh
com o argumento script_name
. Isso significa que será executado por ksh. O shebang só importa ao executar o script explicitamente (por exemplo, ./script_name
).
Resposta curta :
O ksh executará o script e tratará #!/bin/bash
como um comentário.
Explicação :
sempre que qualquer executável for chamado para ser executado, bash ou qualquer chamada de shell exec()
system call
exec()
carrega o arquivo e verifica os primeiros 16 bits do arquivo para ver qual formato executável ele possui. Se encontrar #! , ele usa o resto da primeira linha do arquivo para encontrar qual programa deve ser lançado e fornece o nome do arquivo que ele estava tentando iniciar (o script) como o último argumento para o programa do interpretador.
e é assim que o interpretador especificado no shebang executa o script
mas quando você já especificou ksh e fornece o argumento, exec não estará procurando por shebang, mas o shell encontrará o binário da variável $PATH
para carregar o binário e fornecerá o nome do arquivo como argumento para o binário.