В чем разница между "./somescript.sh" и "./somescript.sh"
Сегодня я следовал инструкциям по установке программного обеспечения в Linux. Был скрипт, который нужно запустить первым. Устанавливает некоторые переменные среды.
Инструкция сказала мне выполнить . ./setup.sh
, но я сделал ошибку, выполнив ./setup.sh
, Таким образом, env не был установлен. Наконец я это заметил и продолжил.
Я хочу знать разницу между этими двумя методами вызова скрипта. Я совершенно новичок в Linux, поэтому, пожалуйста, будьте как можно сложнее.
4 ответа
./setup.sh
запускает скрипт, запускается новая оболочка, которая запускает скрипт. Эта новая оболочка не может повлиять на родительскую оболочку, которая запустила скрипт.
. ./setup.sh
это сокращение для source ./setup.sh
и он запустит скрипт в текущей оболочке, вместо запуска новой оболочки для его запуска. Это означает, что скрипт может изменить поведение текущей оболочки, например, установить новые переменные среды.
Изменить: Я только что понял, что я не ответил на другую часть вашего вопроса... но ответ на leeroy делает это. Я вроде ответил на что-то еще, но я надеюсь, что это поможет:-)
sh
Функция запускает Bash на сценарий, который вы представляете. Смотрите man-страницу для получения дополнительной информации, но вы можете увидеть sh
в основном синоним bash
Когда вы запускаете скрипт аля ./setup.sh
он идентифицирует скрипт на основе того, что находится вверху файла, обычно называемого "Шебанг"
Bash-скрипт будет иметь
#!/bin/sh
Или аналогично в верхней части файла, что позволяет использовать точечный метод. Вы также можете использовать другие вещи, как сценарий Python может иметь
#!/usr/bin/env/python
И если ваш путь правильный, он будет запускать скрипт как скрипт Python вместо bash, используя точечную запись.
Надеюсь, что это объясняется просто!
Просто беги "source /path/to/setup.sh
"
Это установит переменные окружения в текущей оболочке.
.
ссылается на текущий каталог. Так ./script.sh
означает запустить скрипт в текущем каталоге.
../script.sh
будет запускать script.sh в родительском каталоге.
. ./script.sh
(с пробелом между точками) будет жаловаться в некоторых оболочках, таких как csh, но в bash . foo
это сокращение для source foo
,