cd no shell pai com script python

0

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!

    
por mpto 02.08.2018 / 15:05

2 respostas

1

Não. Alterações no diretório de trabalho só podem afetar o processo atual (e futuros filhos).

    
por 02.08.2018 / 15:09
1

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')

Uso:

$ 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
    
por 02.08.2018 / 15:24

Tags