Como alterar o diretório de trabalho de chamar o shell usando um script? [duplicado]

1

Estou tentando criar alguns scripts que mudariam o diretório de trabalho do shell / terminal principal. Não é capaz de fazer isso. Eu tentei o seguinte

Arquivo p1.sh

#!/bin/bash
cd /home/mtk/work/project1

Arquivo code.sh

#!/bin/bash
cd /home/mtk/templates/resusable/sampleCodes

Mas estou ciente de que o texto acima mudaria apenas para si, ou seja, o que está sendo executado atualmente, o que seria p1.sh ou code.sh neste caso.

Por favor, deixe-me saber, como eu seria capaz de mudar o diretório de trabalho atual para o shell de chamada pai.

Exemplo de execução e expectativa:

$ pwd
/home/mtk
$ p1.sh
$ pwd
/home/mtk    ### --> Expected /home/mtk/work/project1

Nota

Meu caso de uso é: Eu gostaria de fazer algum processamento e colocar o prompt em um diretório pré-definido.

EDITAR

Eu vejo por que isso não funcionaria. E alias parece ser a solução para esse caso. Mas eu gostaria de expandir, minha pergunta:

Eu preciso criar um script que altere o diretório de trabalho do shell pai dinamicamente. O script será digamos mycd.sh . Ele teria argumentos de linha de comando como mycd.sh -c/-p1/-p2/ ou alguns outros argumentos definidos pelo usuário.

Dar -c mudaria o diretório de trabalho do shell para o respectivo diretório. O arquivo mycd.sh seria parecido com

.. some processing
# parameter parsing
if [ $param1 -eq "c" ]; then
    # change working dir of parent here
else 
... other conditions

Eu acho que deve haver alguma maneira de alterar o diretório de trabalho do shell.

Por favor, deixe-me saber, se alguma coisa não estiver clara.

    
por mtk 08.10.2012 / 11:02

2 respostas

7

Use aliases para isso, por exemplo

alias p1='cd /home/mtk/work/project1'
alias code='cd /home/mtk/templates/resusable/sampleCodes'

Você deve colocar essas linhas no script de inicialização do seu shell, por exemplo, ~/.bashrc .

Outra opção seria usar funções do shell . Isso é um pouco mais complicado; as funções do shell oferecem algumas vantagens sobre os aliases, mas, nesse caso, você não precisa desses recursos extras.

function p1 { cd /home/mtk/work/project1; }
function code { cd /home/mtk/templates/resusable/sampleCodes; }
    
por 08.10.2012 / 11:17
2

Você não pode alterar o shell de chamada do seu shell de execução

A maneira normal de fazer isso que outros aplicativos (por exemplo, dircolors ) parecem seguir para manipular o shell de chamada é fazer com que o script faça eco do comando cd (ou o que nunca) (em vez de executá-lo). o shell de chamada para envolver a chamada em eval

Isso pode não funcionar no seu caso, já que você está tentando fazer mais do que apenas configurar o shell de chamada em seu script e depende de quem realmente está ligando sabendo o que fazer.

por exemplo.

#!/bin/bash
#somescript.sh
echo cd /some/path

Então

eval './somescript.sh'

É também um pouco desaprovado por segurança; o)

    
por 08.10.2012 / 11:27