人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

cron(crontab)での定期ジョブ実行に関する質問です。
Mac(OSはSierra)で、crontabにジョブを設定してシェルスクリプトを動かしているのですが、シェルスクリプト内の日本語文字が処理できていないことに気づきました。

シェルスクリプト内に、ディレクトリを参照している箇所があって、ディレクトリ名に日本語が使われています。このスクリプト自体を直接ターミナルから実行すれば、正常に動きます。
また、crontabのジョブの記述にも、日本語が含まれていても普通に動きます。
ところが、crontabでそのスクリプトを定期実行しようとした場合だけ、日本語の部分がスキップされた状態になります。

これは、どのようにすれば解消するでしょうか。
よくわかりませんが、シェルスクリプト内に文字コードを明示的に記載したりするのでしょうか?

●質問者: midnightseminar
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● pyopyopyo
●100ポイント ベストアンサー

ターミナルで使っている言語の設定(ロケールと言います)と
cronで使っている言語の設定が異なるのが原因だと思います

まずターミナル側のロケールを確認してください
ロケールはターミナルからコマンドラインで "locale"コマンドを実行すれば
わかります

$ locale
LANG=ja_JP.UTF-8
(以下略)

と出れば "ja_JP.UTF-8" が設定されたロケールになります

おそらくですが
デフォルトのロケールは"ja_JP.UTF-8"とは別のもので
crontabはそちらのロケールで動いていて
一方でターミナル側は
ターミナルのアプリ(terminal.app等)が
LANGを上書き設定してシェルを起動しているのだと思います

たとえばターミナル側でも

export LANG=C 

と実行して LANGを "ja_JP.UTF-8"以外に変更して
それからシェルスクリプトを実行すると日本語のファイル名が使えなくなると思います


解決方法ですが,シェルスクリプト内に

export LANG=ja_JP.UTF-8

を追加して,環境変数 LANGをターミナルのそれとおなじものにすれば
ターミナルと同じ動作になると思います


midnightseminarさんのコメント
localeの指定を追記したらできました! ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ