Как запустить «CD» в Shell Script и остаться там после завершения сценариев?
Вопрос
Я использовал «Сменить каталог» в моем скрипте оболочки (Bash)
#!/bin/bash
alias mycd='cd some_place'
mycd
pwd
pwd
принты some_place
Правильно, но после того, как скрипт закончил мой текущий рабочий каталог не меняется.
Можно ли изменить свой путь скрипта?
Решение
Вам нужно исходить файл как:
. myfile.sh
или
source myfile.sh
Без источника изменений произойдут в подкоре, а не в родительской оболочке, который вызывает скрипт. Но когда вы исходте файл, строки в файле выполняются, как если бы они были напечатаны в командной строке.
Другие советы
Сценарий работает в отдельном подселении. Этот каталог изменений подвишевых изменений, а не оболочка, в которой вы ее запустите. Возможное решение для source
скрипт вместо того, чтобы запустить его:
# Bash
source yourscript.sh
# or POSIX sh
. yourscript.sh
При поиске скрипта вы хотите запустить, это одно решение, вы должны знать, что этот скрипт может напрямую модифицировать среду вашей текущей оболочки. Также невозможно пропустить аргументы больше.
Другой способ сделать, - это реализовать свой скрипт как функцию в Bash.
function cdbm() {
cd whereever_you_want_to_go
echo arguments to the functions were $1, $2, ...
}
Эта техника используется AutoJump:http://github.com/joeltheelion/autojump/wiki.Чтобы предоставить вам закладки каталога обучения Shell.
Это может быть достигнуто путем источника. Поиск в основном выполняет скрипт в той же оболочке, тогда как обычное выполнение (sh test.sh
или ./test.sh
) Создать Sub Shell и выполнить скрипт там.
test.sh.
cd development/
ls
# Do whatever you want.
Выполнять test.sh
по
source test.sh
.
кратчайшая нотация для source
. Отказ Так что вы также можете сделать
. test.sh
Это будет выполнять скрипт и изменить каталог текущей оболочки в development/
.
Всякий раз, когда вы запускаете скрипт на вашу оболочку входа, появляется новый подпроцесс, и выполнение скрипта выполняется в подпункте. Соответствует сценарию, выходит из подполей, и вы возвращаетесь в систему Shell.hence, когда вы делаете компакт-диск через Скрипт, каталог изменен на путь, указанный на CD, но к сценарию времени заканчивается, вы возвращаетесь к вашу оболочку входа в рабочий каталог, откуда вы начали скрипт.
Способ преодолеть это использует,
source yourscript.sh
Какой источник выполняет скрипт в виде сценария TCL, т. Е. Он имеет тот же эффект, что и при наведении каждой строки в командной строке вашего входа в систему, и она выполняется оттуда. Таким образом, когда сценарий заканчивается после CD, он остается в этом каталоге.