Измените каталог текущего терминала с помощью python cli tool - PullRequest
0 голосов
/ 17 июня 2020

Я работаю над простым инструментом cli для изменения директорий проекта в текущем окне терминала. Инструмент cli написан в python с использованием пакета click. Судя по тому, что я видел, я не думаю, что можно изменить каталог, но, возможно, у кого-то есть такое понимание, которое могло бы помочь.

Для примера рабочего процесса

$ pwd
/home/username
$ grab open projectA
$ pwd
/home/username/projects/projectA
$ grab open projectB
$ pwd
/home/username/projects/different/location/projectB

То, что я знаю.

  • Использование python os.chdir(path) работает только в рамках текущего скрипта и не влияет на терминал после его выполнения.
  • Попытка python subprocess.run(['cd', 'path']) будет throw a FileNotFoundError: [Errno 2] No such file or directory: 'cd'
  • Running $ source change_dir.sh будет работать в командной строке, но попробуйте в subprocess тот же FileNotFoundError будет поднят. Обратите внимание, change_dir. sh - это простой скрипт, который использует cd для изменения пути.

Я действительно ищу способ обойти эту проблему или получить сообщение, что это невозможно сделать. Следующее, что я могу попробовать, - это запустить оболочку bash в терминале, аналогичную тому, что происходит при запуске виртуальной среды с python. Мне казалось, что это неправильный путь.

Любой совет будет полезным.

1 Ответ

0 голосов
/ 18 июня 2020

Вы можете создать функцию

grab() {
    case "$1" in
        open)
            cd $(command grab open "$2");;

        *)
            command grab "$@";;
    esac
}

загрузить ее в себя bash

$ . grab.sh

тогда, когда вы запустите

$ grab open projA

изменит dir, а для любой другой подкоманды

$ grab other whatever

будет выполняться grab.

...