Possível lógica ou erro semântico no CentOS7 vs RHEL7

0

Eu me deparei com esse problema há algumas semanas, mas achei que era o meu sistema agindo. Mas depois de algumas investigações, acredito que isso possa ser um erro. Ou talvez eu esteja errado. Ao tentar echo ou touch vários arquivos no CentOS7, como: echo file{a..c}.txt fazendo isso no CentOS7 retorna file{a..c}.txt mas executando o mesmo comando no RHEL7 retorna: filea.txt fileb.txt filec.txt

Alguém mais está com o mesmo problema?

    
por christian x 23.02.2018 / 22:42

2 respostas

1

Você veria esse comportamento se seu shell no sistema CentOS fosse dash , o que não expande os intervalos de chaves como:

$ for shell in bash dash ksh
> do
> echo in $shell:
> $shell -c 'echo file{a..c}.txt'
> done
in bash:
filea.txt fileb.txt filec.txt
in dash:
file{a..c}.txt
in ksh:
filea.txt fileb.txt filec.txt

Dos comentários ignorebraces shell:

$ set -o|grep ignorebraces
ignorebraces          off
$ echo {1..3}
1 2 3
$ set -o ignorebraces
$ echo {1..3}
{1..3}
$ set +o ignorebraces
$ echo {1..3}
1 2 3
    
por 24.02.2018 / 02:18
1

Isso depende do shell que você está usando nos vários sistemas.

A expansão de chave é uma extensão do padrão POSIX para o shell e nem todo shell o implementa. Aqueles que o fazem podem fazê-lo de maneiras diferentes.

O shell dash não implementa a expansão de chaves:

$ echo {0..9}
{0..9}
$ echo {1,2,3}
{1,2,3}

O shell pdksh (como encontrado no OpenBSD) implementa a expansão de chaves, mas não para intervalos:

$ echo {0..9}
{0..9}
$ echo {1,2,3}
1 2 3

O shell bash , zsh e ksh93 implementa intervalos (numéricos e alfabéticos)

$ echo {0..9}
0 1 2 3 4 5 6 7 8 9
$ echo {1,2,3}
1 2 3
    
por 24.02.2018 / 08:13