porque a função cd no script não funciona

2

Eu escrevi um script com o propósito de alterar o diretório e depois digitalizar um arquivo.

#!/bin/bash
model_dir=/mypath

function chdir () {
  cd $1
}
chdir ${model_dir}/config
if [[ ! -s *.cfg ]]
then
  echo 'date' "configure file does not exist"
  exit 1
fi

Eu não sei porque meu diretório atual não é alterado depois que eu executo este script com source myscript.sh .

    
por huayong.zhou 01.10.2015 / 20:43

2 respostas

3

Seu script e especialmente seus comandos internos cd funcionam bem quando chamados de bash com o uso dos comandos source ou equivalentes . .

A questão principal é, como já foi dito em @adonis comment, o seu shell, depois de alterar corretamente seu diretório, irá sair a menos que um arquivo com o nome "* .cfg" exista, o que é muito duvidoso.

Como eu suponho que você queira usar * .cfg como um padrão, aqui está como eu modificaria um pouco seu script para que ele funcione como esperado:

#!/bin/bash # Note that the shebang is useless for a sourced script

model_dir=/mypath

chdir() { # use either function or (), both is a non portable syntax
  cd $1
}

chdir ${model_dir}/config
if [ ! -s *.cfg ]; then # Single brackets here for the shell to expand *.cfg
  echo $(date) "configure file does not exist"
  exit 1  # dubious in a sourced script, it will end the main and only shell interpreter
fi
    
por 01.10.2015 / 22:43
2

É porque o comando cd é executado dentro do script e não no ambiente atual do shell. Se você quiser que o script seja executado em seu ambiente shell atual, execute-o da seguinte forma:

. /path/to/script.sh

Saída do meu exemplo de trabalho do seu script com um pwd no lugar da sua declaração if :

Jamey@CNU326BXDX ~
$ /usr/local/bin/this.sh
/cygdrive/c/users/jamey/downloads

Jamey@CNU326BXDX ~
$ . /usr/local/bin/this.sh
/cygdrive/c/users/jamey/downloads

Jamey@CNU326BXDX /cygdrive/c/users/jamey/downloads
$

Observe o diretório de trabalho atual depois que o script for executado na segunda vez.

    
por 01.10.2015 / 21:31

Tags