Erro de redirecionamento ambíguo para um eco simples

0

Eu me deparei com uma estranheza ao executar um simples comando echo . Alguém pode explicar o que está acontecendo? Aqui está o cenário, existem exatamente três arquivos em uma pasta e quero substituir o conteúdo deles por um caractere em branco. Os arquivos são:

ev_tracker.css  ev_tracker.html  ev_tracker.js

Eu tentei um comando simples para fazer eco de um caractere de espaço para todos os arquivos

$ echo \  > *

e recebi o seguinte erro:

bash: *: ambiguous redirect

Então, tentei ser mais específico ...

$ echo \  > ev_tracker.*
bash: ev_tracker.*: ambiguous redirect

E mais específico ainda…

$ echo \  > ev_tracker.{css,html,js}
bash: ev_tracker.{css,html,js}: ambiguous redirect

Por fim, executei a ação em cada arquivo, individualmente, sem erros.

$ echo \  > ev_tracker.css
$ echo \  > ev_tracker.html
$ echo \  > ev_tracker.js
$

Alguém pode explicar por que recebi o erro? Estou usando o Ubuntu 14.04 e qualquer padrão sh variant que teria.

    
por Madcarrots 04.01.2016 / 06:12

2 respostas

2
echo a > *

será expandido por bash para

 echo a > ev_tracker.css ev_tracker.html ev_tracker.js

de acordo com man bash (REDIRECTION)

The word following the redirection operator in the following descriptions, unless otherwise noted, is subjected to (...) pathname expansion (...)

If it expands to more than one word, bash reports an error.

você pode usar

echo a | tee * > /dev/null

veja o comando man tee , tee é projetado para fazer o que você está procurando.

observe também que

echo \ | tee * > /dev/null

não irá não produzir uma barra invertida nos arquivos.

    
por 04.01.2016 / 11:32
-2

Você simplesmente pode fazer isso:

$ echo ' ' > ev_tracker*

De acordo com o comentário abaixo, foi o que fiz.

$ touch bla blaa blaaa
$ echo ' 1' > bla*
$ cat bla
 1
$ cat blaa
 1
$ cat blaaa
 1

Ele está trabalhando apenas com um espaço, mas isso é difícil de mostrar.

    
por 04.01.2016 / 06:59