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

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

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]

Quero mover alguns arquivos que iniciam no T353 de uma pasta para outra.REMOTE_PATHé /tmp/ eCAMINHOé meu diretório de trabalho

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

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

Responder1

Você parece estar usando a variável PATHem seu script. Esta é a variável que o shell usa para procurar executáveis. Isso significa que se você alterá-lo para algo que não seja uma :lista de caminhos delimitada por -, ou para um caminho que não contenha os executáveis ​​que o script usa, o shell poderá não encontrar mais coisas como mvou 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 existem variáveis ​​que o shell usa para várias coisas, e que você deve evitar modificá-las, a menos que, claro, você gostaria de alterar o comportamento do shell.

As variáveis ​​que o Bash usa estão listadas sob o título "Variáveis ​​do Shell" no manual do Bash.

Aliás, na cdlinha acimafaztrabalhar. É porque é um utilitário especial integrado ao próprio shell. O shell, portanto, não precisa olhar $PATHpara descobrir onde está.

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

Como observação lateral, crie o hábito de colocar aspas duplas em suas variáveis. Ver "Implicações de segurança de esquecer de citar uma variável em shells bash/POSIX".


1 Bem, principalmente, mas o padrão POSIXreserva o namespace de variáveis ​​​​maiúsculas paravariáveis ​​ambientais(ou seja, variáveis ​​de shell exportadas) usadas pelo shell e pela coleção de utilitários padrão. AFAIK, nãoproibiro uso de caracteres maiúsculos emvariáveis ​​​​de shell não exportadas, mas todo o propósito de definir namespaces é evitar conflitos. Como, para um script, variáveis ​​de ambiente e variáveis ​​de shell têm a mesma semântica, é melhor evitar completamente variáveis ​​em maiúsculas.

informação relacionada