バックグランド実行における漢字出力不可の対策方法

このQ&Aのポイント
  • バックグランド実行における漢字出力不可の対策方法とは何か?
  • Linux(Ecolinux9.10)で夜間自動バックアップシステムを稼動させていますが、バックアップが正常に処理されたかどうかの確認時に漢字出力ができない問題が発生しています。
  • 質問者は、シェルを日本語環境で動作させることで問題を解決しようと試みていますが、実際に日本語ターミナルを使用する方法が不明です。解決策を教えていただきたいとのことです。
回答を見る
  • ベストアンサー

バックグランド実行における漢字出力不可の対策方法を教えてください。

バックグランド実行における漢字出力不可の対策方法を教えてください。 Linux(Ecolinux9.10)で夜間自動バックアップシステムを稼動させていますが、バックアップが正常に処理されたかどうかを毎朝自分のWindowsマシン上で確認するために、記録されたファイル名を(インターネット経由で)メールにて送信しています。しかし、毎回受け取っているファイル名は漢字の部分がすべて"¥"が先頭に付いたエンコード文字となって受け取っています。 一連の処理はシェルとして、すべてスケジュール起動しています。 原因を調べたところ、作成されたファイルの中身を見るコマンドtarにてリダイレクションを使って出力したファイルが必ず化けてしまいます。コマンドラインでは、root実行すると発生するようです。また、スケジュール実行では必ず発生します。 そこで質問ですが、root環境でもしっかり漢字のまま、ファイルに出力するようにシェルを工夫する方法、または受け取ったメールを漢字にデコードされた状態になる方法を教えていただけないでしょうか?よろしくお願いします。 なお、ネットで調べた結果、シェルに"export=~"を入れて、シェルを日本語環境で動作させているつもりです。想像では、日本語ターミナル上で動作させることで問題が解決かなと思っていますが、肝心の日本語ターミナルが不明です。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

> シェルに"export=~"を入れて、シェルを日本語環境で動作させているつもりです。 そのつもりがなってないのでしょう。 こっちでやると LC_ALL=C tar tf test.tar →\345\271\263\346\210\220 LC_ALL=ja_JP.UTF-8 tar tf test.tar →平成 となります。 あるいは、\数字を変換するようなフィルタをかけるとか LC_ALL=C tar tf ttt.tar | perl -npe 's/\\(\d+)/sprintf("%c",oct("$1"))/ge' →平成

nza49739
質問者

お礼

回答ありがとうございます。今朝方確認しましたところ、無事日本語表示ができました。 また、文字化けが起こった場合の回避方法も教えていただきありがとうございました。 一番手軽に文字を変換できるのがPerlだったとはと思ったほどです。(Perlをここしばらく使っていないので)

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

あれ? ちょっとまった. よく見たら, "export=~" じゃダメじゃん. 古きよき Bourne shell なら LC_ALL=ja_JP.UTF-8; export LC_ALL bash ならこれかあるいは export LC_ALL=ja_JP.UTF-8 ですよね.

nza49739
質問者

お礼

ご回答ありがとうございます。 チェックしたら、export LANG のパラメータミスであることがわかりました。envでしっかり確認すれば防げたミスでした。 また、何ぞの折はよろしくお願いします。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「"¥"が先頭に付いたエンコード文字」とはどういうものでしょうか? 具体的にシェルスクリプト (not 「シェル」) を見せてもらうことはできませんか? そもそも漢字を使わなければいいというだけの話では?

nza49739
質問者

お礼

> 「"¥"が先頭に付いたエンコード文字」とはどういうものでしょうか? 例: 平成 → \345\271\263\346\210\220  > 具体的にシェルスクリプト (not 「シェル」) を見せてもらうことはできませんか? tar tvf file.gz > mail.txt > そもそも漢字を使わなければいいというだけの話では? 複数のWindowsマシンが利用しているSambaサーバーの中身ですので、漢字は当たり前に使います。問題なのは漢字のファイル名を利用することでなくて、そのファイル名が文字化けすることです。

関連するQ&A

  • プログラミングについて

    ファイルを読み込んで標準出力し、ファイルの最後になったらプログラムを終了するプログラムを作ったのですが動作の確認ができません。シェルのリダイレクトを使い『& ./a.out < afo.c』というコマンドを入力して確認するみたいなのですが、シェルのリダイレクションのこのコマンドはどのように使ったらいいのですか?

  • シェルスクリプトで出力と処理の同時実行

    シェルスクリプトで出力コマンドを実行し、キーワードで 抽出してその行数で分岐させようと考えています。 (出力コマンドはミドルウェアのコマンドでアプリケーションの 状態を表示するコマンドです) 出力コマンドの結果を出力させたいのですが下記のような 流れで行おうとしています。 いちいちファイルに保存せずに出力と、行数の変数への格納を 一度でできる方法はないでしょうか。 出力コマンド | grep [キーワード] | tee tmp/file hensuu=wc -l tmp/file case $hensuu in ・・・ よろしくお願いします。

  • Linuxで標準出力したファイルの文字コードついて

    Linuxで2つのディレクトリの内容をtreeコマンドでそれぞれファイルに出力して、 その2つのファイルをdiffで比較して、その結果をファイルに出力するシェルを作成しました。 比較対象のディレクトリの内部には日本語でファイル名やディレクトリ名を付けているものもあります。 このシェルを手動で実行してファイルに出力された内容を確認すると、 日本語であるべきところは日本語で出力されています。 nkfコマンドでファイルの文字コードを確認すると「UTF8」となっています。 しかし、cronにてこのシェルを実行してファイルに出力された内容を確認すると 何故か日本語の部分が化けて(ASCIIのようです)しまいます。 nkfコマンドでファイルの文字コードを確認すると「ASCII」となっていました。 cronで実行した場合にも出力するファイルの文字コードを「UTF8」にしたいのですが どいうすればよいでしょうか? どなたかご教授願います。 よろしくお願いします。

  • killコマンド実行時のメッセージを出力させないためには?

    あるシェルスクリプトを実行させているところに、killコマンドを送り込むと、コンソールに「終了しました」と表示されてしまうのですが、これを表示させないようにすることはできますか??? kill 100 > 2>&1 > aaa.txtなどとしてもファイルに書き込まれないので、標準出力でも標準エラー出力でもないのでしょうか?

  • 端末画面への出力とファイルへの書き込みを同時に実行する方法

    シェルスクリプト(主にBシェル)を勉強している初心者です。 コマンドを入力するとその出力結果は端末画面へ表示されますが、同時にファイルへの書き込む方法はあるでしょうか?

  • cygwin上でvbscirptを実行する方法

    cygwinのコンソール画面で、hello.vbsというvbsファイルを起動し、vbスクリプトを実行する イメージです。 実現したいことは以下です。 UNIXサーバから、rshコマンドで、Windowsサーバのシェル(cygwin上)を実行する。 Windowsサーバのシェルは、さらに、vbscirpt(拡張子.vbs)を内部で実行する。 本来は、Windowsサーバのシェルのみで実装したいのですが、vbscriptで動作させる方法 しか分からないので、上記方法をとりたいと思っています。

  • シェル(sh)で実行コマンドを標準出力するには

    kshでコマンドを実行して結果をファイルにリダイレクトしています。 結果のみファイルに出力され、実行したコマンドを確認することができません。 実行コマンドも一緒にファイルに出力する方法がありましたら教えてください。 なお、実行コマンドをechoするってのはなしで。 多量のコマンドを実行する場合にめんどくさいので。

  • 実行中のコマンドを、ログアウト後もバックグラウンドで実行させる方法(ksh)

    ksh環境において、実行中のコマンドをログアウトしてもそのまま実行させる方法を教えてください。 ctrl+zでサスペンドにし、jobsでjob番号を確認してbg %<job番号>でバックグラウンドにするのはできましたが、exitでログアウトしターミナルを抜けるとjobが無くなってしまいます。 bashならdisownというコマンドがあるそうなのでdisown %<job番号>でいけるのではないかと思うのですが、kshではdisownに相当するようなものがあるのでしょうか? コマンド実行前なら『nohup <コマンド> &』でできるのは確認済みです。

  • コマンドの出力結果をn行おきに出力する方法

    コマンドの出力結果をn行おきに出力する、出来るだけシンプルな方法を知りたいです。 例えば、あるファイルの中身をgrepで絞込み、かつそれを5行ごとに出力させる等。 シェルの種類は問いません。 宜しくお願い致します。

  • ftpコマンド出力結果の取得

    ftpコマンドのバッチ処理によってファイルの一覧の結果を取得したいのですが、 リダイレクション等を用いても取得できません。 どのようにすればいいか教えてください。 **************状況************* OSおよびOSレベル:AIX5.2 シェル:Kシェル コマンドファイルの中身(ftp.txt) cat << EOF | ftp -n open SERVER user USER PW cd PATH ls -l bye EOF SERVER:実際のサーバー名 USER:実際のユーザー名 PW:実際のパスワード PATH:実際のパス これを以下のように実行し、結果を取得しようとしました。 # ./cmd.ftp > log しかし、出力ファイルlogの中身はカラっぽでした。 ところが、リダイレクションを外し、コマンドファイルのみを実行すると、結果が画面に表示されます。 何故、画面には表示されるのに、リダイレクションやパイプでは結果が渡されないのかが分かりません。