Você não pode comer o seu bolo também. As duas coisas que estão acontecendo aqui estão executando um script em um novo shell e importando linhas de script para serem executadas no shell atual. Usando o operador dot (que é um alias para o comando source
) você está realmente executando o código no seu shell atual . Se o seu código escolher cd
, quando terminar, você será deixado no novo diretório.
Se, por outro lado, você quiser executar um programa (ou script, não importa), esse programa será iniciado como um subprocesso. No caso de scripts de shell, um novo shell será aberto e o código será executado dentro dele. Qualquer cd
de ação efetuada alterará o diretório de trabalho atual desse shell, eficaz para qualquer comando a ser seguido. Quando o trabalho terminar, o shell sairá, deixando-o de volta no seu shell original (e não modificado).
Se é algo que você usa muito e quer que seus efeitos sejam deixados para trás em seu shell atual, talvez você possa escrever seu "script" como uma função shell e salvá-lo em seu ~ / .profile ou outro shell rc arquivo.
function cpj() {
# code here
cd /path/$1
emacs file_name
}