Задать вопрос
6elkka
@6elkka

Как написать на bash программу (исполнимый файл), которая меняет каталог?

Хочу написать скрипт на bash, который помимо прочего должен сменить текущий каталог. Затем хочу сделать этот скрипт исполняемым, написать вначале shebang и поместить в папку, находящуюся в моём $PATH, чтобы вызывать из любого места.

Однако при попытке сделать это столкнулся с тем, что каталог не меняется, т. к. этот скрипт вызывается в отдельном интерпретаторе (в shebang написал #!/bin/bash).

Как же написать программу, меняющую текущий каталог (если это возможно О_о)?

Вариант сделать скрипт функцией и добавить в .bashrc не нравится, т. к. .bashrc выполняется перед запуском интерпретатора и таким образом увеличивает время ожидания при каждом запуске терминала. Поэтому задача поставлена именно так. Меня интересует теоретическая сторона вопроса.

UPD
Уточнение вопроса:

- требуется создать ИСПОЛНИМЫЙ ФАЙЛ
- этот самый ИСПОЛНИМЫЙ ФАЙЛ предполагается положить в одну из папок PATH и вызывать откуда угодно в терминале
- ИСПОЛНИМЫЙ ФАЙЛ при вызове самостоятельно завершать работу и менять текущую рабочую директорию
- ИСПОЛНИМЫЙ ФАЙЛ должен быть написан на bash (и быть с необходимым в этом случае shebang'ом, как я полагаю)

UPD2
Последнее условие (ИСПОЛНИМЫЙ ФАЙЛ должен быть написан на bash) не критично.

И не надо объяснять мне, как решить ту практическую задачу, в ходе которой возникла эта, теоретическая.
  • Вопрос задан
  • 1491 просмотр
Подписаться 2 Оценить 2 комментария
Ответ пользователя Z-r К ответам на вопрос (6)
@Z-r
> требуется создать ИСПОЛНИМЫЙ ФАЙЛ
> этот самый ИСПОЛНИМЫЙ ФАЙЛ предполагается положить в одну из папок PATH и вызывать откуда угодно в терминале
> ИСПОЛНИМЫЙ ФАЙЛ при вызове самостоятельно завершать работу и менять текущую рабочую директорию

Это невозможно. Ну или по крайней мере не должно быть возможно без использования весьма развесистых костылей типа программной записи на ввод телетайпа.

Рабочий каталог — это свойство окружения процесса и он точно так же, как и все окружение, наследуется дочерними процессами, а не разделяется с ними. А исполняемый файл по определению исполняется в дочернем процессе.
Ответ написан
Комментировать