実行時に利用可能なNLS文字セットを確認できますか?

実行時に利用可能なNLS文字セットを確認できますか?

.NETでは、カーネルがサポートするファイルシステムタイプのリストを見つけることができます/proc/filesystems

ファイルシステムをマウントすることに加えて、オプションまたはmount?でiocharset使用できる文字セットを決定する方法はありますか?nls

理想的には、リストが Bash 配列にある必要があるコマンドを完了するために使用できます。

答え1

NLS 文字セットは次のように提供されます。名前が次から始まるモジュールnls_。サポートされている文字セットを確認するには、次のようにします。

  • 以下で組み込み文字セットを見つけます/lib/modules/$(uname -r)/modules.builtin

     grep kernel/fs/nls/nls_ /lib/modules/$(uname -r)/modules.builtin
    
  • 利用可能なモジュールのリスト/lib/modules/$(uname -r)/kernel/fs/nls:

     echo /lib/modules/$(uname -r)/kernel/fs/nls/nls_*
    

利用可能なリストを取得するには、モジュールファイルパスから文字セット名を抽出する必要があります。

#!/bin/bash
charsets=($(grep ^kernel/fs/nls/nls_ /lib/modules/$(uname -r)/modules.builtin)
         /lib/modules/$(uname -r)/kernel/fs/nls/nls_*)
charsets=("${charsets[@]##*/nls_}"); charsets=("${charsets[@]%.ko}")

nls_base.ko実際のエンコーディングを実装せずに除外すると、コマンドの完成に適したリストが生成されます。

$ compgen -W "${charsets[*]}" -X base -- 
ascii
cp1250
cp1251
cp1255
cp437
cp737
cp775
cp850
cp852
cp855
cp857
cp860
cp861
cp862
cp863
cp864
cp865
cp866
cp869
cp874
cp932
cp936
cp949
cp950
euc-jp
iso8859-13
iso8859-14
iso8859-15
iso8859-1
iso8859-2
iso8859-3
iso8859-4
iso8859-5
iso8859-6
iso8859-7
iso8859-9
koi8-r
koi8-ru
koi8-u
utf8

関連情報