ベンダーさんにRHEL9.5入れて貰って、お客さんの希望でcshとSJISロケールをセットアップして貰ったらバックスラッシュ('\')のエスケープが効かなくなってコマンド複数行分割ができなくなったので、Windows-31JじゃなくてSHIFT_JIS使ってんじゃねーの?と思い検証してみた。
環境
セットアップ
# yum install glibc-locale-source
# yum install glibc-langpack-ja
# yum install csh
一応、SHIFT_JISとWindows-31Jが入っていることを確認
# ls /usr/share/i18n/charmaps
SHIFT_JISを使ってja_JP.SJIS、Windows-31Jを使ってja_JP.SJIS2を作成
# localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS
# localedef -f WINDOWS-31J -i ja_JP ja_JP.SJIS2
# localectl set-locale LANG=ja_JP.SJIS
# source /etc/locale.conf
テスト。
# csh
0: イベントが見つかりません.
# ls \
ls: '\' にアクセスできません: そのようなファイルやディレクトリはありません
エスケープが効いてないことを確認。 因みにcsh切り替えで"0: イベントが見つかりません." と出ているのはおそらくこれ(↓)が原因。チルダやバックスラッシュが誤認識されるのだろう。
erattaだとこの辺?(https://access.redhat.com/errata/RHEA-2021:0170) RedHatがSJISをサポートしない方針に変わったのは、この辺の対応が面倒になったからだろうと推測。
# exit
引き続きWindows-31Jの方をセット。こちらの場合はイベントが見つかりません的なエラーメッセージは出ない。
# localectl set-locale LANG=ja_JP.SJIS2
# source /etc/locale.conf
# csh
# ls \
? /usr/
bin games include lib lib64 libexec local sbin share src tmp
そしてエスケープが効いており、/usr/の内容が表示されていることを確認。
うぇーい。
補足
以下によるとWindows-31J判定できないアプリもあるらしいぞ。適度に使い分け推奨の様だ。 access.redhat.com