![Quando eu mudo o diretório de trabalho em um script e o executo, o diretório de trabalho só muda para o caminho especificado enquanto estiver no script](https://rvso.com/image/1575964/Quando%20eu%20mudo%20o%20diret%C3%B3rio%20de%20trabalho%20em%20um%20script%20e%20o%20executo%2C%20o%20diret%C3%B3rio%20de%20trabalho%20s%C3%B3%20muda%20para%20o%20caminho%20especificado%20enquanto%20estiver%20no%20script.png)
Quando altero o diretório de trabalho em um script e o executo, o diretório de trabalho só muda para o caminho especificado enquanto estiver no script. Aqui está o meu script: (isso foi para ter certeza se ele realmente mudou de diretório)
#!/bin/bash
cd /media/hard/drive/partitionX/
pwd
Quando eu o executo, ele retorna o caminho especificado, mas meu diretório de trabalho no terminal não muda. Como altero o diretório de trabalho no meu terminal através de um script?
Responder1
Isto é normal. O diretório "atual" ou "de trabalho" é um parâmetro por processo e um processo só pode mudarprópriodiretório de trabalho. Scripts independentes são executados como um processo de shell separado e não podem afetar o shell pai (na verdade, o pai pode nem sempresercomo o inferno).
Você precisará usar recursos internos ao seu shell, como:
funções de shell:
mycd() { cd /media/hard/drive/partitionX/; pwd; }
apelidos de shell:
alias mycd='cd /media/hard/drive/partitionX; pwd'
"source" um script em vez de executá-lo:
. mycd.sh
Se o seu objetivo principal é criar atalhos para determinados diretórios, você também pode usar:
links simbólicos em um local mais conveniente:
ln -s /media/hard/drive/partitionX ~/partX cd ~/partX
variáveis ($meudir):
mydir=/media/hard/drive cd $mydir
o recurso $CDPATH:
CDPATH=".:/media/hard/drive" cd partitionX
Responder2
Na verdade, acabei de descobrir, depois de muitas pesquisas, que se você precisar alterar o diretório, e ainda manter o mesmo shell, para obter todas as respostas no seu script atual, você pode usar:
(cd your_dir; do_some_command_there)
Por exemplo, o que eu precisava usar era:
((cd your_dir; git remote -v | wc -l)
Funciona como um encanto!