
接続文字列をsocatに渡すことを含むスクリプトを作成しています。
コマンドラインに貼り付けると正常に動作しますが、ファイルを開いてそこに貼り付けると(pico filename.sh
)文字が別のものに変換され、接続文字列が失敗します。
問題のコードは次のとおりです。
conTest=$(echo -e -n "@\0\0'{abcde\0fghij\0Ç\x01Ó|" | socat STDIO tcp4:127.0.0.1:12345)
問題のキャラクターは次のとおりです。
0Ç\x01Ó
これは次のように翻訳されます。
0�\x01�
変換を防ぐ方法はありますか?
私はWindows 7 PCでputty(ssh)を使ってこのコンピュータ(Debian)に接続しています。
私の初期テキストは私のWindows PCのnotepad ++ファイルにあります。その後、そこからDebianサーバーのコマンドラインにコピーして貼り付けました。これを実行するとうまくいきます。
picoを使ってファイルを開き、pico test1.sh
テキストをコピー/貼り付けると大丈夫です。ただし、保存しようとすると(ctrl-O)文字が変更されます。
その後、実行するとfile test1.sh
次のように表示されますtest1.sh: Bourne-Again shell script, ISO-8859 text executable
。
実行するとどのキャラクターなのかiconv -f ASCII -t UTF-8 test1.sh
わかります。illegal input sequence at position 263
Ç
nanoを使用しようとすると、nano test2.sh
コピー/貼り付けが機能せず、問題の文字の後に別の文字が表示されます。また保存しようとすると同じ現象が発生します(文字が変わる現象)。
次に、sftpを使用してファイルをコピーしようとしました。 test3.shにコピーしてサーバーでviとして開きましたvi test3.sh
。これは同じ問題を示しています質問文字が置き換えられます。
しかし走るfile test3.sh
私にtest3.sh: Bourne-Again shell script, UTF-8 Unicode text executable
私はsftpを介してファイルを再コピーして私のWindowsコンピュータで開き、すべての文字が大丈夫で、sftpプロセスに問題がないことを示します。