mv: no encontrado cuando se ejecuta desde un script que modifica la variable PATH

mv: no encontrado cuando se ejecuta desde un script que modifica la variable PATH

Tengo esto en mi guión. Pero está devolviendo un error. Si ejecuto el comando en la consola funciona bien

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

Quiero mover algunos archivos que comienzan en T353 de una carpeta a otra.RUTA_REMOTAes /tmp/ yCAMINOes mi directorio de trabajo

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

Si me make mv /tmp/T353* .funciona bien.

Respuesta1

Parece que estás usando la variable PATHen tu script. Esta es la variable que utiliza el shell para buscar ejecutables. Esto significa que si lo cambia a otra cosa que no sea una :lista delimitada de rutas, o a una ruta que no contenga los ejecutables que usa el script, es posible que el shell ya no encuentre cosas como mvu otras utilidades estándar.

Es preferible usar letras minúsculas en las variables del script del shell por este motivo (es una cuestión de gustos 1 ), o al menos tener en cuenta que hay variables que el shell usa para varias cosas y que debes evitar modificarlas a menos que, por supuesto, le gustaría alterar el comportamiento del shell.

Las variables que utiliza Bash se enumeran bajo el título "Variables de Shell" en el manual de Bash.

Por cierto, el cdde la línea de arribahacetrabajar. Es porque es una utilidad especial integrada en su caparazón. Por lo tanto, no es necesario mirar el caparazón $PATHpara saber dónde está.

Además, dices que ese $PATHes tu directorio de trabajo. El shell ya almacena el directorio de trabajo actual en formato $PWD.

Como nota al margen, adquiera el hábito de citar dos veces sus variables. Ver "Implicaciones de seguridad de olvidarse de citar una variable en shells bash/POSIX".


1 Bueno, en su mayoría, pero el estándar POSIXreserva el espacio de nombres de las variables en mayúsculas paraVariables de entorno(es decir, variables de shell exportadas) utilizadas por el shell y por la colección de utilidades estándar. AFAIK, no es asírechazarel uso de caracteres en mayúsculas envariables de shell no exportadas, pero el propósito de definir espacios de nombres es evitar conflictos. Dado que, para un script, las variables de entorno y las variables de shell tienen la misma semántica, es mejor evitar por completo las variables en mayúsculas.

información relacionada