В чем разница между "./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,

Другие вопросы по тегам