Почему после выполнения файла удара я всегда вернулся для размещения dir?

В моем файле удара я попросил перейти к некоторому subdir, разархивировать файл и остаться там, но когда я ввожу pwd, я вижу, что всегда вернулся для размещения dir. Почему?

Какой-либо способ получить оболочку придерживается subdir?

1
задан 11.04.2010, 22:20

4 ответа

Когда Вы запускаете скрипт, он открывает новую подоболочку для него, таким образом не изменяя переменные среды (включая Ваш рабочий каталог: $PWD) оболочки Вы находитесь в. Если Вы хотите, чтобы сценарий работал в той же оболочке, как Вы, таким образом сохраняя изменения в переменных среды, которые это делает, получите его вместо выполнения. Как это:

source my-script

или:

. my-script

Это, однако, оставит позади каждую временную переменную, которую использует Ваш сценарий. Если Вы хотите избежать его, создать функцию в рамках сценария и объявить все локальные временные переменные. Как это:

function main()
{
    local var1=whatever
    cd /path/to
    do-something
    ...
}

main

Это при вызове source, оставит позади все переменные изменения, как рабочий каталог, но не оставит временные переменные.

2
ответ дан 12.12.2019, 08:03

Выполнение сценария выполняет его в отдельном процессе. Изменения в рабочем каталоге, переменных среды, и т.д. потеряны, когда сценарий выходит.

Для выполнения сценария в текущем ударе обрабатывают Вас, должен получить сценарий

. myscript.sh
4
ответ дан 12.12.2019, 08:03

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

Затем создайте функцию в .bashrc как так:

xcd () {
    local archive="$1" dir="$2"

    your_script "$archive"
    cd "$dir"
}

В отличие от целых сценариев, функции выполняются в контексте текущей оболочки.

Посмотрите Bash FAQ для объяснения.

1
ответ дан 12.12.2019, 08:03

Ваш сценарий удара наследовал копию среды оболочки вызова (рабочий dir, переменные оболочки, и т.д.), который отбрасывается, когда сценарий выходит. Если Вы тестируете какие-либо переменные оболочки, например, путем ввода "$foo эха", они сохранят любое значение (или не существуют), они имели, прежде чем Вы запустили скрипт, как pwd сделал.

0
ответ дан 12.12.2019, 08:03

Теги

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