Você não pode fazer isso diretamente . A única maneira de um shell alterar seu diretório atual é o próprio shell executar um comando cd
(ou pushd
, popd
, etc.).
Mas você pode fazer isso indiretamente. Aqui está um exemplo simples que muda o diretório atual para /tmp
:
cd-tmp.pl:
#!/usr/bin/perl
print "cd /tmp\n";
No seu .bashrc
ou .bash_profile
:
cd-tmp() { eval $(cd-tmp.pl); }
Isso pressupõe que cd-tmp.pl
esteja em um diretório no seu $PATH
- ou você pode especificar o caminho completo na função.
Quando você digita cd-tmp
em seu prompt de shell, ele invoca cd-tmp.pl
, captura sua saída e executa essa saída como um comando shell.
Um script Perl não pode fazer com que um shell de chamada mude de diretório, mas pode fornecer um comando que o shell possa executar sozinho.
É claro que você pode usar um diretório diferente de /tmp
, incluindo um que é determinado com base em outras informações ou criado na hora.
Um ponto de esclarecimento: o diretório atual é uma propriedade do processo shell atual, não do terminal.
ATUALIZAÇÃO:
Acabei de perceber que perdi parte da sua pergunta; você quer "um script perl que executa um script bash". É bastante fácil modificar meu exemplo para fazer isso, mas não tenho idéia por que você precisa do script Perl para executar um script bash. Você não nos contou quase o suficiente sobre o que você está realmente tentando realizar.