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