passando '*' como argumento da linha de comando para shell script

0

Eu tenho o seguinte script de shell no bash:

function zzqfoo {
    python ~/my/dir/path/zzqfoo.py $(abspath $1) $2
}

A idéia é chamar o programa python "zzqfoo.py" com um nome de arquivo local na linha de comando, mas o zzqfoo.py recebe o caminho absoluto para o arquivo graças a $(abspath $1) .

No entanto, quando eu chamo

>>> zzqfoo myfile *

o shell corrompe o * e envia deus sabe o que zzqfoo.py como segundo argumento.

Como evitar que o * seja corrompido? (Eu quero que o zzqfoo.py receba o segundo argumento de linha de comando como está).

Obrigado!

    
por Labrador 02.04.2018 / 07:09

2 respostas

2

the shell corrupts the * and sends god knows what to zzqfoo.py as second argument.

Não "corrompe" o * . Ele faz o que sempre faz: expande o * como curinga, correspondendo os nomes de arquivos e diretórios no diretório atual.

Você deve:

  • cite o * ao passá-lo como um argumento
  • quote $1 , $2 etc. ao usá-lo na função, para que o shell não faça a divisão de palavras ou a expansão de caracteres curinga neles

Então:

function zzqfoo {
    python ~/my/dir/path/zzqfoo.py "$(abspath "$1")" "$2"
}

E corra assim:

zzqfoo myfile '*'
    
por 02.04.2018 / 07:14
1

Cite:

$ zzqfoo myfile "*"

Ou

$ zzqfoo myfile \*

Ou

$ zzqfoo myfile '*'
    
por 02.04.2018 / 07:16