6elkka
@6elkka

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

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

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

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

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

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

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

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

И не надо объяснять мне, как решить ту практическую задачу, в ходе которой возникла эта, теоретическая.
  • Вопрос задан
  • 1341 просмотр
Решения вопроса 1
Mystray
@Mystray
NOC
То, что вы хотите, по-хорошему решается не так, как вы хотите.
Но если настолько сильно хочется странного - то пример гуглится в первой же ссылке.
Обвязку для того, как выцепить PID родителя, напишите сами.
unix.stackexchange.com/questions/281994/changing-t...
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
@ns5d
нечего сказать
CityCat4
@CityCat4
Внимание! Изменился адрес почты!

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


Смеетесь, да? Ну удлинится запуск шелла на пару микросекунд - неужто заметите?
Ответ написан
@Z-r
> требуется создать ИСПОЛНИМЫЙ ФАЙЛ
> этот самый ИСПОЛНИМЫЙ ФАЙЛ предполагается положить в одну из папок PATH и вызывать откуда угодно в терминале
> ИСПОЛНИМЫЙ ФАЙЛ при вызове самостоятельно завершать работу и менять текущую рабочую директорию

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

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


#!/bin/bash

cd /

echo "I'm in `pwd`"

bash

exit 0
Ответ написан
@ipc_ngs
Если чисто теоретически, то можно использовать команду source (или .) для вызова скрипта:
$ cat ~/bin/tt.sh
cd /tmp

$ pwd
/
$ . tt.sh
$ pwd
/tmp
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы