O script Bash lança infinitamente processos

2

Ubuntu. A ferramenta de nome de base deve ser instalada. O script bash é nomeado como "basename"

#!/bin/bash

PROGNAME=$(basename $0)

if [[ -e $1 ]]; then
   echo -e "\nFile Type:"
   file $1
   echo -e "\nFile Status:"
   stat $1
else
   echo "$PROGNAME: usage: $PROGNAME file" >&2
   exit 1
fi

Após o lançamento de "./basename case", onde "case" é um script bash, ocorreram erros:

/home/user/bin/basename: fork: retry: No child processes
/home/user/bin/basename: fork: retry: No child processes
...
/home/user/bin/basename: fork: Resource temporarily unavailable

E no final, mostra o resultado esperado.

Algo complicado acontece aqui. O que é isso?

    
por stark 19.08.2016 / 22:30

1 resposta

2

Ok, eu entendi. O comando basename na terceira linha inicia não a ferramenta linux basename, mas inicia este script recursivamente. Então, nomear scripts como os padrões dos programas linux não é bom. Para fazer o script funcionar com o nome "basename", é necessário usar um nome de caminho completo para o nome de base.

PROGNAME=$(/usr/bin/basename $0)
    
por 19.08.2016 / 22:40

Tags