일부 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
site-enabled/* 파일에는 각각 한 줄이 포함되어 있습니다.
include sites-availabe/cwrcoding.com.conf;
사이트 활성화/* 파일을 반복하고 해당 파일을 잘라내어 해당 내용을 파일로 읽으려고 할 때 이상한 오류가 발생하여 최소한의 작업 솔루션을 시도하고 거기에서 작업했지만 다음은 여전히 발생합니다.
λ 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;
==========
보시다시피 대부분의 웹사이트에서는고양이출력은 있어야 할 텍스트로 대체됩니다.뒤쪽에명령 대체.
무슨 일인지 설명해 줄 수 있는 사람 있나요? 아니면 버그를 발견한 걸까요?
이 파일을 보려면:https://github.com/cwrau/nginx-config
답변1
문제는 파일에 DOS/Windows 스타일 줄 끝이 있다는 것입니다. 빠른 해결 방법으로 다음을 교체하십시오.
echo "$(cat "$enabled") |"
그리고:
echo "$(tr -d '\r' <"$enabled") |"
여기서는 tr
파일을 표시하기 전에 캐리지 리턴을 제거하면 문제를 피할 수 있습니다.
dos2unix
그러나 파일이 Unix 시스템에서 사용되도록 만들어진 경우 하나 또는 유사한 유틸리티를 사용하여 파일 자체에서 캐리지 리턴을 제거하는 것이 더 나을 수 있습니다 .
예
두 개의 DOS 스타일 파일을 만들어 보겠습니다.
$ echo 'include sites-availabe/cwrcoding.com.conf;' | unix2dos > sites-enabled/file1
$ echo 'include sites-availabe/cwrcoding.com.conf;' | unix2dos > sites-enabled/file2
원래 명령을 실행해 보겠습니다.
$ for enabled in sites-enabled/*; do echo "$(cat "$enabled") |"; echo ==========; done
|clude sites-availabe/cwrcoding.com.conf;
==========
|clude sites-availabe/cwrcoding.com.conf;
==========
손상된 출력을 확인하십시오.
을 적용한 후 tr
예상되는 출력을 받습니다.
$ for enabled in sites-enabled/*; do echo "$(tr -d '\r' <"$enabled") |"; echo ==========; done
include sites-availabe/cwrcoding.com.conf; |
==========
include sites-availabe/cwrcoding.com.conf; |
==========