O script Python usa argumentos de sequência com './ [];' - Diga ao terminal para processar como entrada literal?

0

Meu script recebe um key como seu terceiro argumento, e ele pode ter qualquer tipo de entrada ... incluindo caracteres que o bash reclama.

Eu realmente gostaria de usar este script único direto do terminal, alguém pode explicar como eu poderia fazer com que a minha entrada funcionasse se fosse assim?

>/my/scripts $ python script.py string 123 spe[i@lk;y
/bin/sh: Syntax error: "(" unexpected
y: command not found
>/my/scripts $ python script.py string 123 "spe[i@lk;y"
/bin/sh: Syntax error: "(" unexpected

E sim, eu tenho o #! usr/bin/env python shebang no meu script.

    
por Droogans 06.04.2012 / 04:58

1 resposta

1

O script não pode fazer nada para informar bash para não aplicar as regras de globulação e interpolação usuais. Na verdade, não há como evitá-lo, embora você possa desabilitar alguns aspectos (especificamente globbing e interpolação variável, mas não o significado especial de, digamos, parênteses). Você precisa usar alguma forma de cotação.

Dito isto, o erro entre parênteses diz-me que está a ler o seu Python como um script de shell, o que significa que provavelmente tem a linha shebang no lugar errado. Deve ser a linha primeira do script (sem linhas em branco antes dela), pode não começar com espaços à esquerda, e se o seu exemplo é o que você realmente usou, então você está perdendo uma barra na frente/usr/bin/env.

    
por 06.04.2012 / 05:01