script que example español ejemplos definicion shell scripting sh

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.