Bashで次のコードを実行します。
bash /dev/fd/10 10<<-'SES'
cat <<EMR >> /etc/apache2/apache2.conf
#
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
EMR
SES
しかし、実行が中断され、次のようになります。
警告:ここでは、文書行2はファイルの末尾に区切られています(「EMR」が必要です)。
- エラーが何を意味するのかわかりません。
-
タブの移動を許可するために、演算子と埋め込み区切り文書の名前の間に追加しました。 - 確かに席がないと思います。後ろにこれオープニングメント(演算子+名前)またはそれ以降区切り記号。
注:上記のコードをコピーしてコンピュータでテストする場合は、以下のようにすべての先行スペースをタブ(タブ文字)に変更する必要があります。スタック交換ソーステーブルを空白に変更します。
除外する理由:
これにはいくつかの理由がありますが、私が除外したいくつかの理由は次のとおりです。
1. 問題のある隠されたキャラクター:
Notepad ++を使用してファイルを編集し、「すべての記号を表示」モードをオンにして、すべてのインデントがテーブルベース(赤い矢印を参照)であり、すべての行末文字(EOL)がLF
UNIXベース(何もないCR
)であることを確認しました。
そして、エンコーディングはUTF-8
なので、エンコーディングの問題ではありません。
2. 医師ダッシュ( <<-
):
<<-
追加されたハイフン()は、すべての先行タブを削除する操作を実行していないようです。手動ですべての先行タブを削除するときどの(またはすべてのメインタブ各区切り記号の前に)heredocは期待どおりに動作します。人々が提案することができます。ハイフン本当ではないスプリントシンボルなのになぜダメ?これを確認する方法はありません。
3. 大きな打撃エラー:
Windowsを使用せずにBashを含む他のLinuxディストリビューションを使用している人にはこの問題はないため、これはBashのバグではない可能性があります。また、GNUのBash開発セクションでもこれをテストしました。
Notepad ++からコピーしたデータの貼り付けの破損は、次のようになります。
Notepad++のheredocをファイルに貼り付けると、前のnano
タブがすべて所定の位置にあるようです。貼り付けても削除されませんが、スペースに変換されます。
また、cat script.sh | grep "^ "
and cat script.sh | grep -x '\s*EMR'
(ファイルディレクトリで実行されている場合)の結果は空です。
しかし、後で貼り付ける過程でこの問題を引き起こす可能性が最も高い別の損傷の問題が見つかりました(私の答えを参照)。
ベストアンサー1
公開した画像にはキャリッジリターン(CR
画像参照)が表示されます。 DOS形式のテキストファイルです。dos2unix
または、同様のユーティリティを使用してファイルを適切なUnixテキストファイルに変換します。
以下の説明に従って:WindowsでNotepad ++で開発する必要がある場合(可能な場合はターゲットとする同じOSで開発することを個人的にお勧めします)改行を使用するには:
ファイルのLF
最後の行の末尾に改行文字()があることを確認してください。みんなUnixテキストファイルの行(シェルスクリプトはテキストファイルです)必要最後に終了改行文字があります。最後の行が見つからない場合、技術的にはファイルは実際にはテキストファイルではなくバイナリファイルです。
たとえば、ログファイルから^M文字を削除する」