que - shell scripting pdf
"Ls: not found" después de ejecutar "read PATH" (1)
Estoy tratando de escribir un pequeño script para enumerar un directorio de una variable dada.
Sin embargo, no puedo ejecutar
ls
después de leer mi entrada en la variable
PATH
.
#!/system/bin/sh
echo "enter directory for listing"
read "PATH"
ls "$PATH" -R > list.txt
Esto sale con:
ls: not found
... y no escribe nada en
list.txt
.
El nombre de la variable
PATH
ya está reservado para un propósito diferente: enumera todas las ubicaciones posibles buscadas para encontrar comandos no integrados en el shell.
ls
es tal comando.
Por lo tanto, cuando cambia el valor de
PATH
, cambia la forma en que el shell intenta buscar el ejecutable
ls
;
a menos que el nuevo valor de
PATH
incluya un directorio con un ejecutable
ls
, cualquier intento adicional de ejecutar
ls
(u otros comandos no integrados en el shell) fallará.
En su lugar, use un nombre de variable diferente, idealmente, incluyendo al menos un carácter en minúscula, para evitar conflictos con las variables incorporadas (en mayúsculas) y las variables de entorno.
Por lo tanto, una forma corregida podría ser:
#!/system/bin/sh
echo "enter directory for listing"
IFS= read -r path
ls -R -- "$path" > list.txt
Tenga en cuenta que la
-R
se mueve antes de la
"$path"
en este caso, mientras que los sistemas GNU permitirán que los argumentos opcionales sean posteriores a los argumentos posicionales, muchos sistemas UNIX más antiguos solo tratarán las banderas (como
-R
) como válidas si son encontrado
antes
del primer argumento sin opción / bandera.