выполнение .sh и окончание в другом каталоге

Я знаю, что для этого есть простая команда, но я пытаюсь запустить файл file.sh, содержащий строки вроде:

mkdir $filename
cd $filename

файл выполняется, но заканчивается в файле, который я начал in. Я знаю, что есть простое ключевое слово, которое нужно указать, чтобы выполнение оставило меня в каталоге $ filename, но я не могу найти его в интернете. Я нашел это однажды, но, кажется, не могу сделать это снова.

6
задан 29 January 2013 в 10:38

2 ответа

Согласно этому:

https://stackoverflow.com/questions/255414/why-doesnt-cd-work-in-a-bash-shell-script

можно выполнить использование сценария

. ./scriptname

и это выполнит сценарий оболочки с Вашей оболочкой, не вызывая подоболочку как то, что обычно происходит.

4
ответ дан 29 January 2013 в 10:38

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

Чтобы запустить скрипт в текущем контексте оболочки, вам нужно использовать source или его псевдоним ., то есть source script.sh или . script.sh.

Самое простое решение для такой простой операции - создать псевдоним вместо скрипта, т.е. alias mkcd='mkdir dir; cd dir' или, если вам нужно запустить произвольные каталоги, вы можете выполнить функцию mkcd() { mkdir $1; cd $1 }. Вы можете поместить любой из них в свои ~/.bashrc или ~/.bash_aliases.

0
ответ дан 29 January 2013 в 10:38

Другие вопросы по тегам:

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