Sequências aninhadas no comando bash [duplicado]

1

Eu estou tentando escrever um script para listar todas as linhas shebang em arquivos python.

O que eu gostaria de fazer é

sudo bash -c 'for logf in $(find / -name "*.py"); do fgrep '#!/usr/bin' "$logf"; done'

Isso dá erro bash: !/usr/bin': event not found . Eu entendo porque, embora o significado do erro não seja claro.

O problema é que não consigo descobrir como passar uma string para bash , o que inclui outra string sem a execução de comandos.

Se eu deixar o "#!" funciona, mas obviamente inclui várias outras linhas.

Eu tentei praticamente todas as combinações de escape e string sem sucesso.

    
por Milliways 20.02.2016 / 04:41

1 resposta

1

Graças aos comentários, tenho duas versões que funcionam. Note que fiz algumas alterações (para encontrar apenas o shebang no começo da linha) e para permitir espaços em branco depois da shebang.

sudo bash -c 'for logf in $(find / -name "*.py"); do grep '^\#\!/usr/bin' "$logf"; done'

Por algum motivo, quando tentei permitir espaço em branco após o shebang, não pude fazê-lo funcionar.

Ainda melhor (e mais simples)

sudo find / -name "*.py" -exec grep '^#! */usr/bin' {} \;
    
por 20.02.2016 / 05:44