macOS High Sierra (10.3) -bash: find.: comando não encontrado

1
$ find . -name ‘*.blade.php’ -not -path ‘*/vendor/*’ | wc -l

Eu executei este comando há alguns dias e estava tudo certo com o mundo.

Executando hoje eu recebo:

-bash: find .: command not found

Nada mudou no meu sistema que eu saiba. Uma pesquisa rápida não retornou algo específico para esse problema. Achei que poderia ajudar alguém a postar a pergunta.

O que há com isso? :)

    
por Josh Bruce 07.11.2017 / 07:12

1 resposta

2

Não estou totalmente certo do que aconteceu, mas acho que você tem algo como um espaço não-separável entre "find" e ".". Espaços não separáveis são caracteres unicode que parecem exatamente como espaços normais, mas não indicam locais válidos para envolver uma linha de texto. Mas enquanto eles se parecem com espaços normais, o shell não tem idéia do que fazer com eles, e apenas os trata como caracteres normais. Uma conseqüência disso é que ele não os reconhece como delimitadores entre um comando e seu argumento. Aqui está um exemplo:

$ find . -name ‘*.blade.php’ -not -path ‘*/vendor/*’ | wc -l    # With normal space
       0
$ find . -name ‘*.blade.php’ -not -path ‘*/vendor/*’ | wc -l    # With nonbreaking space
-bash: find .: command not found
       0
$ find . -name ‘*.blade.php’ -not -path ‘*/vendor/*’ | wc -l    # With ALL nonbreaking spaces
-bash:  wc -l: command not found
-bash: find . -name ‘*.blade.php’ -not -path ‘*/vendor/*’ : No such file or directory

(Note que eu não tenho arquivos que correspondam ao padrão, então a contagem sai 0.) O que está acontecendo no segundo comando é que eu tenho um espaço não-separável (digitado como Option-Space no meu Mac) entre "find" e ".", então o shell trata "find < nonbreakingspace & gt ;." como o comando ... que não é reconhecido. No terceiro comando, substituí TODOS os espaços por outros não-invasivos; reconheceu o "|" como um delimitador entre comandos, mas as coisas literalmente todo o resto na linha fazem parte de um nome de comando.

Essa mensagem de erro que o comando "encontrar". não foi encontrado é a oferta sobre o que está acontecendo; está tratando o espaço como coisa e "." como parte do comando, então eles aparecem na mensagem de erro dessa maneira.

No entanto, algo me confunde: eu não tenho certeza de como você conseguiu o espaço não-quebrador no primeiro lugar. Copie e cole para & do Notes não deve fazer nenhuma conversão. Talvez você tenha atacado Opção por engano? Eu não sei.

BTW, notei outra coisa ao editar isso: as aspas simples que você tem são aquelas que parecem perfeitamente como citações perfeitamente boas, mas como espaços não-quebráveis, não são reconhecidas dessa maneira pela casca. Este eu sei a fonte de: em muitos contextos, o macOS irá auto- "corrigir" aspas simples para o tipo de fantasia (um recurso chamado "aspas inteligentes"). Isso tende a causar estragos nos scripts. Vou dar uma recomendação para BBEdit como um bom editor que não mexa com o que você digita , tornando-o bom para scripts. Não é grátis, mas mesmo que você não pague, ele é executado em um modo limitado que ainda é muito melhor para o script do que os editores incorporados.

    
por 07.11.2017 / 08:14