Não. Alterações no diretório de trabalho só podem afetar o processo atual (e futuros filhos).
Eu quero meu programa python para cd
em um diretório via terminal como um processo pai. Existe alguma maneira de fazer isso?
Eu estava esperando por algo assim:
$ ./cd.py Desktop/scripts
$ pwd
/home/mfto/Desktop/scripts
Obrigado antecipadamente!
Não. Alterações no diretório de trabalho só podem afetar o processo atual (e futuros filhos).
Isso não é possível, e você verá que cd
não é realmente um " programa " no sentido normal - não é um arquivo em disco que pode ser executado, mas sim um comando " built-in ". Comandos incorporados são interpretados pelo próprio shell (por exemplo: bash
). Para obter uma lista dos comandos internos de bash
, consulte os " Comandos internos do Shell " seção da página man (ou use o help
embutido).
Se cd
não fosse embutido no shell, seria impossível alterar o diretório sem forçar um novo processo a cada vez (o que seria muito confuso).
Isso ocorre porque o diretório de trabalho atual (como o ambiente) é uma propriedade de um processo. Essas coisas podem ser herdadas de um pai para um filho, mas não podem ser " empurradas " de volta dos filhos para os pais.
Se você realmente deseja ter um script python alterando o diretório de trabalho atual e apresentando um shell, será necessário fazer algo assim:
cd.py
#!/usr/bin/env python3
import os
os.chdir('/tmp/')
os.system('bash')
$ pwd
/home/attie/
$ echo $$
30665 # the original shell's PID
$ ./cd.py
$ pwd
/tmp
$ echo $$
30464 # the sub-shell's PID... it's parent is python
$ exit
exit
$ pwd
/home/attie/
$ echo $$
30665 # the original shell's PID