diferença de comando no shell do Solaris e do Linux

1

eu tenho esse trecho de um script shell, ele roda perfeitamente no ambiente Solaris

grep -h '??.*??' $1/{CT,{MYDIR{85,97}}{,_E}}/R*txt

mas quando tento rodar o shell script no ubuntu, ele dá o seguinte erro

grep: ./{MYDIR85}/R*txt: No such file or directory
grep: ./{MYDIR85}_E/R*txt: No such file or directory

depois de um pouco de edição rodar corretamente, eu removi chaves de MYDIR

grep -h '??.*??' $1/{CT,MYDIR{85,97} {,_E}}  /R*txt

Eu quero saber qual é o problema, é incompatibilidade de comando entre linux e solaris?

Nota -i tenho três diretório MYDIR85, MYDIR97 e CT      - no ubuntu, o shell é / bin / bash      - no solaris eu não sei o tipo de shell, mas a primeira linha do shell script é #! / bin / bash

    
por user143252 26.12.2016 / 15:59

1 resposta

3

De acordo com as% man_de% manpages

A correctly-formed brace expansion must contain unquoted opening and closing braces, and at least one unquoted comma or a valid sequence expression. Any incorrectly formed brace expansion is left unchanged.

Em sua expressão bash , a chave externa não possui uma vírgula sem aspas nem uma expressão de seqüência, portanto, não é expandida - resultando em {MYDIR{85,97}} . Apenas para fins de ilustração, você pode obter o comportamento desejado adicionando uma vírgula à direita:

bash $ echo {MYDIR{85,97},}
MYDIR85 MYDIR97

embora isso introduza um elemento {MYDIR85} {MYDIR97} extra-presumivelmente indesejado em sua expressão composta _E .

Eu não sei por que você está vendo um comportamento diferente no Solaris, exceto notar que {CT,{MYDIR{85,97}}{,_E}} faz remover as chaves externas sob essa condição (embora também aceite o formulário de vírgula final - como csh e ksh aparentemente):

csh % echo {MYDIR{85,97}}
MYDIR85 MYDIR97
csh % echo {MYDIR{85,97},}
MYDIR85 MYDIR97
    
por 26.12.2016 / 16:56