2013-08-20 3 views
1

Недавно меня задали вопрос. Каковы различные способы выполнения сценария оболочки и какова разница между каждым методом?Разница между различными способами запуска сценария оболочки

Я сказал, что мы можем запустить скрипт в следующих методов, предполагающих test.sh это имя сценария,

  1. ш test.sh
  2. ./test.sh
  3. . ./test.sh

Я не знаю разницу между 1 & 2. Но, как правило, в первых 2-х методов, при выполнении, он будет порождать новый процесс и запустить то же самое. Если в последнем методе он не будет порождать новый процесс. Вместо этого он работает в одном и том же.

Может ли кто-нибудь бросить больше понимания на это и исправить меня, если я ошибаюсь?

+0

[Разница между запуском сценария с ./script.sh и. ./script.sh](http://stackoverflow.com/questions/1880735/difference-between-launch-a-script-with-script-sh-and-script-sh) – devnull

+0

[в чем разница между «./somescript.sh» и «. ./somescript.sh"](http://stackoverflow.com/questions/2634219/what-is-the-difference-between-somescript-sh-and-somescript-sh) – devnull

+0

[В чем разница между запуском сценария оболочки как ./script.sh и sh script.sh] (http://stackoverflow.com/questions/2468132/whats-the-difference-between-running-a-shell-script-as-script-sh-and-sh -script) – devnull

ответ

7
sh test.sh 

Сообщает команду использовать sh для выполнения test.sh.

./test.sh 

Сообщает команду выполнить сценарий. Интерпретатор должен быть определен в первой строке с чем-то вроде #!/bin/sh или #!/bin/bash. Примечание (thanks keltar), что в этом случае файл test.sh должен иметь права выполнения для пользователя, выполняющего эту команду. В противном случае он не будет выполнен.

В обоих случаях все используемые переменные истекают после выполнения сценария.

. ./test.sh 

Исходный код. То есть, он выполняет его и независимо от выполняемых, переменных, определенных и т. Д., Будет сохраняться в сеансе.

Для получения дополнительной информации, вы можете проверить What is the difference between executing a bash script and sourcing a bash script? очень хороший ответ:

Отличия:

  • Когда вы выполнить скрипт вы открываете новый оболочки, тип команды в новой оболочке, скопируйте вывод обратно в текущую оболочку , затем закройте новую оболочку. Любые изменения в среде будут принимать эффект только в новой оболочке и будут потеряны после закрытия новой оболочки .

  • Когда вы источник скрипт вы набираете команды в вашем текущей оболочки. Любые изменения в среде вступят в силу и останутся в вашей текущей оболочке.

+0

Спасибо за ваш быстрый ответ. Спасибо за разъяснение каждого метода. – Prabu

+0

Просто быстрое примечание - для второго варианта у вас должны быть права файловой системы для выполнения этого файла. Для других это не обязательно. – keltar

+0

@ keltar, вы совершенно правы. Просто обновлено соответствующим образом. Благодаря! – fedorqui

Смежные вопросы