mv: não encontrado quando executado a partir do script que modifica a variável PATH

4

Eu tenho isso no meu script. Mas está retornando um erro. Se eu executar o comando no console funciona bem

./script.sh[16]: mv: not found [No such file or directory]

Eu quero mover alguns arquivos que começam no T353 de uma pasta para outra. REMOTE_PATH é / tmp / e PATH é meu diretório de trabalho

cd $REMOTE_PATH
mv T353* $PATH #this is the line 16

Se eu make mv /tmp/T353* . funcionar bem.

    
por userGuest 24.04.2017 / 15:37

1 resposta

20

Você parece estar usando a variável PATH em seu script. Esta é a variável que o shell usa para procurar executáveis. Isso significa que, se você alterá-lo para outra coisa que não seja uma lista de caminhos : -delimited ou para um caminho que não contenha os executáveis que o script usa, o shell poderá não encontrar mais coisas como mv ou outros utilitários padrão.

É preferível usar letras minúsculas em variáveis de script de shell por esse motivo (é uma questão de gosto 1 ), ou pelo menos estar ciente de que há variáveis que o shell usa para várias coisas , e que você deve evitar modificá-los, a menos, claro, que você queira alterar o comportamento do shell.

As variáveis que o Bash usa estão listadas sob o cabeçalho "Variáveis Shell" no manual do Bash.

Por acaso, o cd na linha acima faz funcionar. É porque é um utilitário especial embutido no próprio shell. Portanto, o shell não precisa examinar $PATH para descobrir onde está.

Além disso, você diz que $PATH é seu diretório de trabalho. O shell já armazena o diretório de trabalho atual em $PWD .

Como uma nota secundária, crie o hábito de duplicar suas variáveis. Veja " Implicações de segurança do esquecimento para citar uma variável em shells bash / POSIX ".

1 Bem, principalmente, mas as reservas padrão POSIX o namespace de variáveis maiúsculas para variáveis de ambiente (isto é, variáveis de shell exportadas) usadas pelo shell e pela coleção de utilitários padrão. AFAIK, ele não desativa o uso de caracteres maiúsculos em variáveis de shell não exportadas , mas todo o propósito de definir namespaces é evitar conflitos. Desde que, para um script, variáveis de ambiente e variáveis de shell têm a mesma semântica, é melhor simplesmente evitar variáveis maiúsculas.

    
por 24.04.2017 / 15:41