Подтвердить что ты не робот

Как запустить 'cd' в оболочке script и остаться там после завершения script?

Я использовал "каталог изменений" в своей оболочке script (bash)

#!/bin/bash
alias mycd='cd some_place'
mycd
pwd

pwd правильно печатает some_place, но после завершения script мой текущий рабочий каталог не изменяется.

Можно ли изменить мой путь на script?

4b9b3361

Ответ 1

Вам нужно указать файл как:

. myfile.sh

или

source myfile.sh

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

Ответ 2

script запускается в отдельной подоболочке. Этот подселл меняет каталог, а не оболочку, в которой вы его запускаете. Возможное решение заключается в source script вместо его запуска:

# Bash
source yourscript.sh
# or POSIX sh
. yourscript.sh

Ответ 3

В то время как поиск script, который вы хотите запустить, является одним из решений, вы должны знать, что этот script затем может напрямую изменить среду вашей текущей оболочки. Также невозможно передать аргументы.

Другой способ сделать это - реализовать script как функцию в bash.

function cdbm() {
    cd whereever_you_want_to_go
     echo arguments to the functions were $1, $2, ...
}

Этот метод используется autojump: http://github.com/joelthelion/autojump/wiki чтобы предоставить вам учебные закладки в каталоге оболочки.

Ответ 4

Это может быть достигнуто путем поиска. Sourcing в основном выполняет script в той же оболочке, тогда как обычное выполнение (sh test.sh или ./test.sh) создаст подкоманду и выполнит script там.

test.sh

cd development/
ls
# Do whatever you want.

Выполнить test.sh на

source test.sh

. - кратчайшее обозначение для source. Таким образом, вы также можете сделать

. test.sh

Это выполнит script и изменит каталог текущей оболочки на development/.

Ответ 5

всякий раз, когда вы запускаете script в своей оболочке входа, генерируется новый подпроцесс и выполнение script выполняется в подселле. После завершения script подоболочка завершается, и вы возвращаетесь в оболочку входа. Если всякий раз, когда вы делаете cd через script, каталог изменяется на путь, указанный cd, но к моменту окончания script вы возвращаетесь в свою оболочку входа в рабочий каталог, откуда вы запустили script.

Чтобы преодолеть это, используйте

source yourscript.sh

что делает источник, он выполняет script как TCL script, т.е. он имеет тот же эффект, что и при вводе каждой строки в командной строке вашей оболочки входа, и она выполняется оттуда. Таким образом, когда script заканчивается после cd, он остается в этом каталоге.