“Ls: não encontrado” depois de executar “ler PATH”

Estou tentando escrever um pequeno script para listar um diretório de uma determinada variável. No entanto, não consigo executar ls depois de ler minha input na variável PATH .

 #!/system/bin/sh echo "enter directory for listing" read "PATH" ls "$PATH" -R > list.txt 

Isso sai com:

 ls: not found 

… e não escreve nada no list.txt .

O nome da variável PATH já está reservado para uma finalidade diferente: lista todos os possíveis locais pesquisados ​​para encontrar comandos não incorporados ao shell.

É um tal comando. Assim, quando você altera o valor de PATH , você altera a maneira como o shell tenta procurar o executável ls ; a menos que o novo valor de PATH inclua um diretório com um executável ls , qualquer outra tentativa de executar ls (ou outros comandos não incorporados ao shell) falhará.

Em vez disso, use um nome de variável diferente – idealmente, incluindo pelo menos um caractere minúsculo, para evitar conflito com variables ​​internas e variables ​​de ambiente (todas as maiúsculas).


Assim, um formulário corrigido pode ser:

 #!/system/bin/sh echo "enter directory for listing" IFS= read -r path ls -R -- "$path" > list.txt 

Note que o -R é movido antes do "$path" neste caso – enquanto os sistemas GNU permitirão argumentos opcionais após argumentos posicionais, muitos sistemas UNIX mais antigos tratarão apenas flags (como -R ) como válidos se forem encontrado antes do primeiro argumento não sinalizador / opção.