Как изменить текущий каталог, используя command_not_found_handle в Bash? - PullRequest
0 голосов
/ 06 апреля 2020

В моем файле .bashr c у меня есть функция

changeDirectory()
{
 cd "/home/bin"
}

Если я нахожусь в / home и в командной строке ввожу changeDirectory, текущим каталогом становится / home / bin

Если эта функция вызывается из других функций, она также работает для изменения текущего каталога.

handler()
{
 changeDirectory
}

Если я наберу обработчик в командной строке, он изменит мой текущий каталог на / home / bin

Однако, если я вызову changeDirectory из этой функции:

command_not_found_handle()
{
 changeDirectory
 echo "$PWD"
}

Когда я набираю команду, она не найдена, и эта функция вызывается, она выводит / home / bin, но когда я набираю pwd в командной строке, я все еще в / home

Кажется, что функция command_not_found_handler ведет себя не так, как обычные функции. Есть ли способ изменить мой текущий каталог?

1 Ответ

0 голосов
/ 06 апреля 2020

Небольшой поворот в ответе @Cyrus с использованием временного файла вместо кода выхода.

command_not_found_handle () { touch $HOME/.changedirectory.$$; }
PROMPT_COMMAND='rm $HOME/.changedirectory.$$ 2>/dev/null && changeDirectory'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...