Não é possível parar o bash para expandir estrela (caractere curinga) passado para o aplicativo a partir do shellscript

2

Eu tenho um script de shell que deve passar o caractere curinga star ["*"] para um aplicativo sem usar aspas. Eu estou lendo desde horas e sempre encontro para usar "set -f" dentro do shell script dos chamados, mas isso não faz nada. Pode ser que eu tenha entendido mal alguma coisa, mas não vejo o que.

Estou escrevendo um aplicativo C # com o framework mono e minha chamada dentro do bash é assim:

#!/bin/bash
set -f
mono app.exe "$@"

Meu script de shell chamado "runit" será usado assim:

runit *

Alguém pode, provavelmente, lançar alguma luz sobre isso? Eu até tentei mostrar as opções ativas do shell deste script, mas nada é mostrado.

    
por mabra 09.06.2016 / 02:36

1 resposta

1

com

#!/bin/bash
set -f
mono app.exe "$@"

set -f não tem efeito porque a matriz de argumentos com aspas duplas ( "$@" ) não sofre mais expansões.

Se "$@" contiver um argumento cujo valor seja * , ele passará para mono app.exe inalterado.

O problema é que o shell que está chamando este script de wrapper irá querer expandir o asterisco, já que set +f é o padrão.

Você precisará de set -f neste shell de chamada, e não no wrapper.

Com set +f (padrão), a barra invertida ( \* ) é outra alternativa à cotação ( '*' ou "*" ) que você pode querer considerar.

    
por 09.06.2016 / 02:44