Eu estava tentando analisar algumas configurações do nginx
λ tree sites-enabled/ sites-available/
sites-enabled/
├── bank.cwrcoding.com.conf
├── calendar.cwrcoding.com.conf
├── cloud.cwrcoding.com.conf
├── cwrcoding.com.conf
├── drive.cwrcoding.com.conf
├── groups.cwrcoding.com.conf
├── mail.cwrcoding.com.conf
├── sites.cwrcoding.com.conf
├── studentenverwaltung.cwrcoding.com.conf
├── wekan.cwrcoding.com.conf
└── www.cwrcoding.com.conf
sites-available/
├── bank.cwrcoding.com.conf
├── calendar.cwrcoding.com.conf
├── cloud.cwrcoding.com.conf
├── cwrcoding.com.conf
├── drive.cwrcoding.com.conf
├── groups.cwrcoding.com.conf
├── mail.cwrcoding.com.conf
├── sites.cwrcoding.com.conf
├── studentenverwaltung.cwrcoding.com.conf
├── wekan.cwrcoding.com.conf
└── www.cwrcoding.com.conf
Cada um dos arquivos habilitados para sites/* contém uma única linha:
include sites-availabe/cwrcoding.com.conf;
Ao tentar iterar sobre os arquivos habilitados para sites/*, cortando-os e tentando ler seu conteúdo como arquivos, recebi um erro estranho, então tentei uma solução de trabalho minimalista e trabalhei a partir daí, mas ainda assim o seguinte acontece:
λ for enabled in sites-enabled/*
> do
> echo "$(cat "$enabled") |"
> echo ==========
> done
include sites-available/bank.cwrcoding.com.conf; |
==========
|clude sites-available/calendar.cwrcoding.com.conf;
==========
|clude sites-available/cloud.cwrcoding.com.conf;
==========
|clude sites-available/cwrcoding.com.conf;
==========
|clude sites-available/drive.cwrcoding.com.conf;
==========
|clude sites-available/groups.cwrcoding.com.conf;
==========
|clude sites-available/mail.cwrcoding.com.conf;
==========
|clude sites-available/sites.cwrcoding.com.conf;
==========
|clude sites-available/studentenverwaltung.cwrcoding.com.conf;
==========
include sites-available/wekan.cwrcoding.com.conf; |
==========
|clude sites-available/www.cwrcoding.com.conf;
==========
Como você pode ver, para a maioria dos sites, os primeiros caracteres da saída cat são substituídos pelo texto que deveria estar após a substituição do comando.
Alguém pode explicar o que está acontecendo? Ou encontrei algum bug?
Se você quiser dar uma olhada nos arquivos: https://github.com/cwrau/nginx-config
O problema é que seus arquivos têm finais de linha estilo DOS/Windows. Como uma solução rápida, substitua:
Com:
Aqui,
tr
remove o caractere de retorno de carro antes que o arquivo seja exibido, evitando o problema.No entanto, se seus arquivos forem usados em um sistema Unix, seria melhor remover os retornos de carro dos próprios arquivos usando um dos
dos2unix
utilitários ou similares.Exemplo
Vamos criar dois arquivos estilo DOS:
Vamos executar o comando original:
Observe a saída mutilada.
Com
tr
aplicado, recebemos a saída que esperamos: