Como posso usar o sed em / etc / apache2 / sites-available?

4

Estou tentando escrever um script que usa sed para copiar o arquivo padrão para o apache e grava um novo arquivo, substituindo /var/www ( $DOC_ROOT abaixo ) com meu próprio diretório, $NEW_SITES_DIR . No entanto, o sed não está operando corretamente sob o sudo: recebo um erro "permissão negada" para o seguinte:

sudo sed -ie 's:$DOC_ROOT:$NEW_SITES_DIR:g' < default > $NEW_SITE

Eu tentei gerar um sub-shell

sudo sh -c "sed -ie 's:$DOC_ROOT:$NEW_SITES_DIR:g' < default > $NEW_SITE"

e use tee

sudo sed -ie 's:$DOC_ROOT:$NEW_SITES_DIR:g' < default | sudo tee $NEW_SITE

mas eu recebo um erro "sem arquivos de entrada" .

Tenho certeza de que as duas últimas tentativas que escrevi estão um pouco erradas. Qualquer sugestão seria muito apreciada.

RESPONDIDO

Obrigado a todos pela sua ajuda. Aqui está o comando exato:

sudo sed -e "s:$DEF_SITES_DIR:$NEW_SITES_DIR:g" < $DEF_SITE | sudo tee $NEW_SITE

E aqui está uma frase chave do referência :

Don’t lose sleep over this, but someday it will come handy, and when you can figure out why the “sudo” does not apply after the “>” in your command, remember tee and come back here.

    
por Matt Norris 07.11.2010 / 03:37

1 resposta

3

Seu problema é o -i . Isso está dizendo sed para editar o arquivo no lugar, mas você está fornecendo o arquivo em stdin, redirecionando-o. Tente eliminar o -i .

Não há realmente necessidade de redirecionar o arquivo de entrada, pois sed aceita um nome de arquivo como argumento. Se as permissões de leitura no arquivo forem restritas, então sudo sed (e não usando redirecionamento) cuidará disso. Por não usar -i , o arquivo original será deixado intacto.

O sudo tee deve cuidar das permissões de gravação para saída, se necessário.

    
por 07.11.2010 / 10:07