eu tenho vistoesta respostadesde que procurei por isso, mas inicialmente escrevi este script:
for i in `seq 1 $1`;
do cd ../;
done;
Não muda de diretório. Por que isso está funcionando como
./updir.sh 5
Responder1
A execução de um script conforme mostrado cria um ambiente copiado em um subshell, e quaisquer alterações feitas, como definir diretórios ou variáveis de ambiente, afetam apenas esse ambiente de subshell, não o shell de chamada.
Para fazer alterações no shell atual a partir de um script, você deve executar o script dentro do shell atual usando o comando source
ou .
:
. ./updir.sh 5
Você pode tornar isso automático com um alias:
alias updir='. ./updir.sh'
Alternativamente, você pode usar uma função em vez de um script:
updir()
{ for i in `seq 1 $1`;
do cd ../;
done
}
Responder2
Porque os scripts são executados em um subshell, que controla o diretório de trabalho atual separadamente. A solução mais simples é usar uma função:
function updir() {
for i in $(seq 1 $1); do
cd ..
done
}