Как запустить «CD» в Shell Script и остаться там после завершения сценариев?

StackOverflow https://stackoverflow.com/questions/3879431

  •  28-09-2019
  •  | 
  •  

Вопрос

Я использовал «Сменить каталог» в моем скрипте оболочки (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, он остается в этом каталоге.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top