Каково различие между “./somescript.sh” и “../somescript.sh”

Сегодня я следовал некоторым инструкциям для установки программного обеспечения в Linux. Был скрипт, который должен быть запущен сначала. Это устанавливает некоторые переменные среды.

Инструкция сказала мне выполняться . ./setup.sh, но я сделал ошибку путем выполнения ./setup.sh. Таким образом, ENV не был установлен. Наконец я заметил это и продолжил двигаться.

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

9
задан codeforester 2 February 2017 в 05:20
поделиться

4 ответа

./setup.sh запускает скрипт, будет запущена новая оболочка, которая выполняет скрипт. Эта новая оболочка не может повлиять на родительскую оболочку, которая запустила сценарий.

. ./setup.sh является сокращением для source ./setup.sh и запускает сценарий в текущей оболочке, вместо того, чтобы запускать новую оболочку для его выполнения. Это означает, что сценарий может изменять поведение текущей оболочки, например, устанавливать новые переменные окружения.

21
ответ дан 4 December 2019 в 08:51
поделиться

Просто запустите "source /path/to/setup.sh"

Это установит переменные окружения в текущей оболочке.

0
ответ дан 4 December 2019 в 08:51
поделиться

Edit: Я только что понял, что не ответил на другую часть вашего вопроса ... но ответ Лироя делает это. Я вроде как ответил на кое-что еще, но надеюсь, что это поможет: -)

Функция sh запускает bash в сценарии, который вы ее представляете. См. страницу руководства для получения дополнительной информации, но вы можете видеть, что sh в основном является синонимом для bash

, когда вы запускаете сценарий ala ./ setup. sh он идентифицирует сценарий на основе того, что находится в верхней части файла, обычно называется "Shebang"

. В сценарии bash должно быть

#!/bin/sh

или что-то подобное в верхней части файла, что позволяет использовать точечный метод. Вы также можете использовать другие вещи, например, скрипт Python может иметь

#!/usr/bin/env/python

. И если ваш путь правильный, он будет запускать скрипт как скрипт Python, а не как скрипт bash, используя точечную нотацию.

Надеюсь, что это объясняет просто!

3
ответ дан 4 December 2019 в 08:51
поделиться

. относится к текущему каталогу. Итак, ./ script.sh означает запуск сценария в текущем каталоге.

../ script.sh запустит script.sh в родительском каталоге.

. ./script.sh (с пробелом между точками) будет жаловаться в некоторых оболочках, таких как csh, но в bash . foo - это сокращение для исходного текста foo .

0
ответ дан 4 December 2019 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: