Я знаю, что для этого есть простая команда, но я пытаюсь запустить файл file.sh, содержащий строки вроде:
mkdir $filename
cd $filename
файл выполняется, но заканчивается в файле, который я начал in. Я знаю, что есть простое ключевое слово, которое нужно указать, чтобы выполнение оставило меня в каталоге $ filename, но я не могу найти его в интернете. Я нашел это однажды, но, кажется, не могу сделать это снова.
Согласно этому:
https://stackoverflow.com/questions/255414/why-doesnt-cd-work-in-a-bash-shell-script
можно выполнить использование сценария
. ./scriptname
и это выполнит сценарий оболочки с Вашей оболочкой, не вызывая подоболочку как то, что обычно происходит.
Когда вы выполняете скрипт оболочки, это эквивалентно запуску его в другой оболочке. Выполнение ./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
.