В чем разница между: ". [script] " или " source [script]", "bash [script] или $SHELL [script] "и"./ [script] " или "[script]"?

Я знаю, что source и . сделайте то же самое, и я был бы удивлен, узнав, что другие пары команд в заголовке не так же (потому что я запускаю bash как свою оболочку,$SHELL [script] и bash [script] эквивалентны, верно??).

так в чем разница между тремя методами выполнения скрипта? Я спрашиваю, потому что я только что узнал, что поиск сценария не то же самое как его выполнять. В том смысле, который я не считал очевидным. от проведения моих "экспериментов" и чтения мужских страниц.

каковы другие тонкие различия, которые я не мог найти, слепо вызывая эти функции на невероятно простых сценариях, которые я написал? прочитав вышеприведенный ответ, я могу с уверенностью предположить, что ответ на мой вопрос будет довольно простым объяснением, но таким образом, что я почти никогда полностью не открою себя.

вот" эксперимент", который я сделал:

$. myScript.sh
  "This is the output to my script. I'd like to think it's original."

$source myScript.sh
  "This is the output to my script. I'd like to think it's original."

$bash myScript.sh
  "This is the output to my script. I'd like to think it's original."

$$SHELL myScript.sh
  "This is the output to my script. I'd like to think it's original."

$./myScript.sh 
  "This is the output to my script. I'd like to think it's original."

$myScript.sh 
  "This is the output to my script. I'd like to think it's original."

1 ответов


. script и source script выполнить содержание script в сложившейся обстановке, т. е. без создания подуровень. На верху это позволяет script чтобы повлиять на текущую среду, например, изменение переменных среды или изменение текущего рабочего каталога. С другой стороны, это позволяет script чтобы повлиять на текущую среду, которая является потенциальной угрозой безопасности.

bash script передает script до bash переводчик выполняет. Все, что дает shebang игнорируется. ("Shebang" относится к первой строке script, который может, например, читать #!/bin/bash или #!/usr/bin/perl или #!/usr/bin/awk, чтобы указать интерпретатор, который будет использоваться.)

$SHELL script передает script to каков бы ни был ваш текущий интерпретатор оболочки выполнить. Это может быть, а может и не быть bash. (Переменная окружения SHELL содержит имя текущего интерпретатора оболочки. $SHELL, если выполняется bash, оценивается в /bin/bash, С эффектом, подробно описанным в предыдущем абзаце.)

./script выполняет содержимое файла script в текущем каталоге работы. Если такого файла нет, возникает ошибка. Содержание $PATH не влияют на то, что происходит.

script ищет файл script в каталогах, перечисленных в $PATH, который может включать или не включать текущий рабочий каталог. Первый script нашел в этом списке выполняется каталоги, которые могут быть или не быть в вашем текущем рабочем каталоге.