В терминале Linux есть ли разница между «bash foo.sh» и «./foo.sh»?

В терминале Linux есть ли разница между «bash foo.sh» и «./foo.sh»?

При выполнении bash-скрипта в терминале Linux есть ли разница между " bash foo.sh" и " ./foo.sh"? Или это просто два разных способа выполнения одной и той же функции?

решение1

Они, вероятно, эквивалентны, если./foo.sh

  1. является исполняемым, и
  2. начинается с #!/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.

Это просто способ сообщить ядру, какой сценарий оболочки будет использоваться для запуска сценария, а также внесения каких-либо изменений в сценарий.

Связанный контент