Я прочитал этот вопрос и ответ, но он не подходит для моей проблемы, даже если он похож.
Я пишу скрипт (называется cpj), который запустит один из моих текущих проектов. У меня около 5 из них. Когда я печатаю
$ cpj blah
Я хочу, чтобы текущий рабочий каталог изменился на каталог проекта blah (который я храню в $ PROJDIR), и я хочу, чтобы emacsclient открыл основной файл для этого проекта (который я держу в $ MAINFILE).
Приведенный мной вопрос говорит о том, что вы не можете напрямую изменить среду оболочки, в которой выполняется сценарий, но вы можете создать сценарий, и он это сделает.
Чтобы проверить это, я написал сценарий оболочки (называемый chcwd), который имеет одну строку:
cd $1
Если из командной строки я делаю:
$ . chcwd $PROJDIR
мой текущий рабочий каталог будет меняться по желанию. Если, с другой стороны, из моего сценария cpj у меня есть такая же строка:
. chcwd $PROJECT
это не изменит текущий рабочий каталог оболочки. Я понимаю, что я запускаю 2 сценария (cpj, а затем chcwd) и таким образом создаю 2 оболочки, но не вижу способа выполнить то, что я хочу. Может кто-нибудь показать мне, как достичь своей цели?
источник
У меня есть аналогичный сценарий, написанный для личного использования. Существует очень простой способ добиться изменения рабочего каталога внутри скрипта. Сначала просто напишите свой сценарий, in.ex .:
Теперь давайте предположим, что скрипт называется 'cdto'. Чтобы заставить его работать, вы должны поместить его в текущую оболочку, чего можно добиться с помощью 'source' или '.' команда (оба одинаковы). Например:
Теперь, чтобы сделать его более удобным:
Скопируйте скрипт 'cdto' в каталог 'bin' вашей учетной записи (например, / home / johnsmith / bin - создайте его, если он не существует). Проверьте переменную PATH, чтобы убедиться, что каталог bin включен:
echo $ PATH
Если нет, отредактируйте ваш файл .profile и добавьте:
Добавьте псевдоним в ваш файл .bashrc или .bash_aliases:
псевдоним cdto = '. cdto»
И это сделано. После следующего входа в систему или при открытии нового терминала вы можете просто использовать in.ex .:
Наслаждаться :-)
Себастьян Пих
источник
Простой трюк для этого:
Теперь рабочий каталог - $ PROJECT.
источник