4

UltraEditを使用してWindowsで編集し、UEの[名前を付けて保存]ダイアログボックスで指定されているように、Unixラインターミネータースタイルを使用してUTF-8NoBOMとして保存するbashスクリプトがあります。

次に、Parallelsvirtuozzoを実行しているcentos5 x86マシンにアップロードします。アップロードする方法(バイナリファイルとしてのFTP、またはParallels Management Console経由)に関係なく、スクリプトは機能しません。Parallels管理コンソールを介してスクリプトを表示すると、最後の行と最後の行だけに奇妙な文字が含まれていることがわかります。最後の行から行末記号を削除すると(スクリプトを最後の印刷可能な文字で終了させます)、すべてが正常に機能します。

私の質問:

A)なぜ最後のラインターミネータだけが問題を引き起こしているのですか?

B)将来これを回避するにはどうすればよいですか?

ありがとう!

4

7 に答える 7

2

dos2unixを実行するだけでそれらを取り除くことができます。

于 2009-07-25T01:01:44.980 に答える
2

まず、バイナリとして転送することをお勧めします。必要な形式を正確に知っているようです。

ASCII /テキストFTPは、必要のないときに行末変換を行うことで知られています。

于 2009-07-24T17:18:24.740 に答える
2

ここには2つの問題があります。まず、エディターがUnixの行末で保存すると仮定すると、ASCIIではなくバイナリFTPを使用する必要があります。第二に、これは不可解ですが、エディターCTRL-Zはファイルの最後にを挿入しているようです(これは、80年代後半のAFAIK以降は必要ありませんでした)。

1行で構成されるファイルを保存し、通常の方法でUnixシステムに転送して、次を使用します。

xxd myscript.sh

ファイルの最後のバイトが0x1a私の理論が正しいかどうかを確認することであるかどうかを確認します。

于 2009-07-25T01:10:36.263 に答える
2

UltraeditでCTRL-Hを使用しました。これは、unixのXXDコマンドと同じ出力を表示します。ファイルはUNIXの行末記号を使用するように設定されていますが、そこに0D0Aが表示されます。これはUltraeditの問題です。私はv13.20aを使用しています。

私はstackoverflowに不慣れです。新しい質問を開くか、これにタグを付け直す必要がありますか?

ありがとうございます

于 2009-07-26T17:08:51.517 に答える
2

このオプションをオフにしても、保存されたすべての新しいファイルでUltraeditにBOM(バイト順マーク)が設定されているという同様の問題がありました。これはLinuxで大混乱を引き起こしました。解決策は、デフォルトのエンコーディングをANSIIに設定することでした。この設定は、少なくともUltraEditv18に含まれています。

詳細>設定>エディタ>新しいファイルの作成

エンコーディングタイプ:ANSIIとして新しいファイルを作成します

于 2012-08-07T12:45:36.657 に答える
1

次のステップは、ファイルに対してhexdumpを実行し、そこに何があるかを確認することです。これは、そこにベアCRがあるように聞こえます。キャリッジリターンは、「現在の行の位置0に次の文字を書き込む」ことを意味することに注意してください。hexdump -C file実行中または偶数を試して、 and (= CR、= LF)od -t x1 fileを探します。0A0D0D0A

于 2009-07-24T17:56:53.010 に答える
0

スクリプトをリモートで編集するだけです。

emacs / vim/nanoなどはパテの上でうまく機能します。emacsが好きなら、trampを使ってリモートファイルを編集することもできます。私はWindowsでtrampを使ったことがありませんが、目の前に座っているマシンでemacsを実行しています。komodo-editはリモート編集としても使用できます。また、komodo-editを強くお勧めしますが、リモート機能は使用していません。

于 2009-07-25T09:06:04.723 に答える