tee resulta em um arquivo nulo

3

Eu tento mudar a configuração do Apache com isso:

sudo awk '/<Directory \/var\/www\/>/,/AllowOverride None/{sub("None", "All",$0)}{print}' /etc/apache2/apache2.conf | sudo tee /etc/apache2/apache2.conf > /dev/null

Depois disso, /etc/apache2/apache2.conf está vazio. Se eu alterar o arquivo de destino para ~/apache2.conf , por exemplo, a saída está correta.

Por quê?

    
por MikkoP 20.08.2015 / 14:21

2 respostas

4

Você está referenciando o mesmo arquivo duas vezes no pipeline, tee sobrescreverá o arquivo antes que awk chegue a ele. Use um arquivo temporário ou use sponge de moreutils .

As versões recentes do GNU awk, 4.1.1, possuem um -i inplace argumento que simula o arquivo de edição no local :

    
por Thor 20.08.2015 / 18:50
1

Que sua aventura awk / tee não funciona de maneira confiável, o que já foi dito aqui . ;)

Você pode tentar de outra forma:

rolo de bateria

Use o poder de perl !

novamente drum-roll

sudo perl -i.bak -0777pe 's/(<Directory \/var\/www\/>([^<].*\n)*.*AllowOverride\s)None/$1All/' /etc/apache2/apache2.conf
  • -i.bak

    Editar no local e criar um backup /etc/apache2/apache2.conf.bak

  • -0777

    mastiga todo o arquivo de uma só vez

Exemplo

Arquivo de entrada

cat foo

<Directory /var/www/>
    foo bar
    AllowOverride None
</Directory>


<Directory /var/www1/>
        AllowOverride None
</Directory>

O comando

perl -i.bak -0777pe 's/(<Directory \/var\/www\/>([^<].*\n)*.*AllowOverride\s)None/$1All/' foo 

O conteúdo do arquivo depois de iniciar o comando

cat foo

<Directory /var/www/>
    foo bar
    AllowOverride All
</Directory>


<Directory /var/www1/>
        AllowOverride None
</Directory>
    
por A.B. 20.08.2015 / 21:08