При выполнении bash-скрипта в терминале Linux есть ли разница между " bash foo.sh
" и " ./foo.sh
"? Или это просто два разных способа выполнения одной и той же функции?
решение1
Они, вероятно, эквивалентны, если./foo.sh
- является исполняемым, и
- начинается с
#!/bin/bash
(или эквивалент)
В противном случае, а также учитывая предварительные условия, которые вы описываете ( foo.sh
является скриптом bash), версия ./foo.sh
может завершиться ошибкой либо из-за отсутствия у пользователя разрешения на выполнение, либо из-за того, что она интерпретируется /bin/sh
вместо /bin/bash
( /bin/sh
является интерпретатором скрипта по умолчанию).
решение2
В дополнение к ответу Тоби я хочу отметить, что следует проверять существующие параметры bash shebang в скрипте (например, #!/bin/bash -e) перед вызовом просто 'bash foo.sh'. Вызов скрипта через 'bash foo.sh' не будет заботиться о существующих параметрах bash в shebang.
решение3
Люди уже объясняли здесь, но простыми словами bash foo.sh
это означает, что foo.sh будет выполнен в оболочке bash.
Это просто способ сообщить ядру, какой сценарий оболочки будет использоваться для запуска сценария, а также внесения каких-либо изменений в сценарий.