いくつかの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/* ファイルにはそれぞれ 1 行が含まれています。
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システムで使用されるように作成されている場合は、1つまたは類似のユーティリティを使用してファイル自体からキャリッジリターンを削除する方が良いかもしれません。
はい
2つの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; |
==========