Изменить каталог в терминале с помощью Python
Я пишу простой сценарий, чтобы изменить текущий рабочий каталог на другой каталог. Следующий скрипт работает нормально, пока программа не завершится, после чего я вернусь в свой домашний каталог.
#!/usr/bin/python
import os
if __name__ == '__main__':
os.chdir("/home/name/projects/python")
os.system("pwd")
print 'dir changed'
Выход:
bash:~$ python chdir.py
/home/name/projects/python
dir changed
bash:~$ pwd
/home/name
Я хочу, чтобы изменение каталога сохранялось даже после выхода из программы. Есть идеи как это сделать?
Изменить: что я действительно хочу сделать, это: я часто использую этот каталог, а не делать cd <path>
каждый раз, когда я открываю терминал, я просто пишу ./progname
и это меняет каталог.
3 ответа
Если вы хотите, чтобы изменение каталога сохранялось даже после выхода из программы. Вы можете завершить скрипт python с помощью "os.system("/bin/bash"), это оставит вас в оболочке bash внутри нового каталога.
#!/usr/bin/python
import os
if __name__ == '__main__':
os.chdir("/home/name/projects/python")
os.system("pwd")
os.system("/bin/bash")
Для необходимости, поднятой в вашем комментарии "Я часто использую этот каталог, а не doind cd <path>
каждый раз, когда я открываю терминал, я просто пишу ./progname
и это меняет каталог
Я бы предложил использовать псевдоним bash, который изменит каталог:
bash:~$ alias mycd='cd /home/name/projects/python'
и используйте этот псевдоним в оболочке bash, чтобы изменить каталог:
bash:~$ mycd
Вы можете добавить этот псевдоним в свой.bashrc, что позволит вам использовать этот псевдоним каждый раз.
С уважением,
Ярон
Это не работает, потому что, когда вы запускаете скрипт, он создает новую среду. Когда ты cd
в этой новой среде он работает, но возвращается к старой среде, как только программа завершается.
Если бы вы использовали скрипт bash, вы могли бы запустить source program.sh
бежать program.sh
в той же "среде", поэтому, когда программа завершает работу, она остается в том же каталоге.
Другой вариант кто-то разместил, выполняя /bin/bash
после cd
, похоже, работает, так как фактически создает новый процесс bash внутри вашей программы Python. Это означает, что ваша программа все еще работает и может не подходить для некоторых приложений.
Обратите внимание, что если ваша цель - просто создать ярлык для изменения каталога в терминале. Возможно, вам лучше использовать псевдоним bash.
Этот ответ в точности совпадает с принятым в том смысле, что он решает проблему, которая не добавляет никакой ценности, но делает это немного иначе. Я думаю, что этот ответ, возможно, добавляет ценность в объяснении и альтернативной реализации. Вы можете решить.
Хорошо, извините за вопли.
Вы должны просто отредактировать свой .bash_profile
файл. Это действительно просто. Сенсорный создает файл, а затем открыть функционально открывает его. В вашем терминале:
touch ~/.bash_profile; open ~/.bash_profile
Это открывает текстовое редактирование. Создайте свой ярлык вот так, я положил его в конец моего файла:
alias cdd="cd ~/frequent/my-directory"
Затем запустите это, чтобы обновить ваш .bash_profile
файл. (Или закройте и снова откройте терминал, как хотите.)
source ~/.bash_profile
Теперь вы просто запускаете вышеупомянутый ярлык:
Macbook-Spen:~ spen$ cdd
И это переключает ваш каталог, с гораздо меньшим количеством нажатий клавиш!
Macbook-Spen:my-directory spen$
Источники: