Как написать на bash программу (исполнимый файл), которая меняет каталог?
Хочу написать скрипт на bash, который помимо прочего должен сменить текущий каталог. Затем хочу сделать этот скрипт исполняемым, написать вначале shebang и поместить в папку, находящуюся в моём $PATH, чтобы вызывать из любого места.
Однако при попытке сделать это столкнулся с тем, что каталог не меняется, т. к. этот скрипт вызывается в отдельном интерпретаторе (в shebang написал #!/bin/bash).
Как же написать программу, меняющую текущий каталог (если это возможно О_о)?
Вариант сделать скрипт функцией и добавить в .bashrc не нравится, т. к. .bashrc выполняется перед запуском интерпретатора и таким образом увеличивает время ожидания при каждом запуске терминала. Поэтому задача поставлена именно так. Меня интересует теоретическая сторона вопроса.
UPD
Уточнение вопроса:
- требуется создать ИСПОЛНИМЫЙ ФАЙЛ
- этот самый ИСПОЛНИМЫЙ ФАЙЛ предполагается положить в одну из папок PATH и вызывать откуда угодно в терминале
- ИСПОЛНИМЫЙ ФАЙЛ при вызове самостоятельно завершать работу и менять текущую рабочую директорию
- ИСПОЛНИМЫЙ ФАЙЛ должен быть написан на bash (и быть с необходимым в этом случае shebang'ом, как я полагаю)
UPD2
Последнее условие (ИСПОЛНИМЫЙ ФАЙЛ должен быть написан на bash) не критично.
И не надо объяснять мне, как решить ту практическую задачу, в ходе которой возникла эта, теоретическая.
нет, в том-то и дело, что это не работает. Если сделать скрипт исполняемым файлом и запустить как программу (на самом деле даже если запустить как bash ), то он начинает работать в отдельном интерпретаторе и как только его работа заканчивается, рабочая папка меняется на ту, которая была до запуска.
> требуется создать ИСПОЛНИМЫЙ ФАЙЛ
> этот самый ИСПОЛНИМЫЙ ФАЙЛ предполагается положить в одну из папок PATH и вызывать откуда угодно в терминале
> ИСПОЛНИМЫЙ ФАЙЛ при вызове самостоятельно завершать работу и менять текущую рабочую директорию
Это невозможно. Ну или по крайней мере не должно быть возможно без использования весьма развесистых костылей типа программной записи на ввод телетайпа.
Рабочий каталог — это свойство окружения процесса и он точно так же, как и все окружение, наследуется дочерними процессами, а не разделяется с ними. А исполняемый файл по определению исполняется в дочернем процессе.