「xdg-mime クエリファイル形式」は、「file --mime-type」とは異なるファイル形式を返します。

「xdg-mime クエリファイル形式」は、「file --mime-type」とは異なるファイル形式を返します。

電子メールを生成するために実行するbashスクリプトがあります。現在のプロジェクトでは非常に重要なので、今修正したくありません。コマンドは、オペレーティングコンピュータとマイコンピュータで異なる方法で実行されます。

xdg-mime query filetype <file>

us-asciiこれは、単純にエンコードされたテキストファイル(カスタムファイル拡張子を含む)で実行されます。問題は、スクリプトが実行中のオペレーティングシステムからplain/text(予想される動作)を返すことです。 xdg-mimeのデバッグモードは、実際にはオペレーティングfile -iマシンでコマンドを実行していることを示しています。しかし、私のコンピュータではコマンドが返され、application/octet-stream実行されます。gnomevfs-infoデスクトップ環境に関連しているようです(両方のシステムがgnomeで実行されています)。

xdg-mime強制的に実行させる方法はありますかfile -i?それともgnomevfs-info正しいMIMEタイプを返しますか?設定を解除しようとしましたが、GNOME_DESKTOP_SESSION_ID機能しますxdg-mime

detectDE()
{
    if [ x"$KDE_FULL_SESSION" = x"true" ]; then DE=kde;
    elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome;
    elif `dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/null 2>&1` ; then DE=gnome;
    elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce;
    fi
}

3番目は、コマンドが0を返し、DEがgnomeに設定されているため、overが使用されるようにすることelifです。マニュアルページを見ようとしましたが、コマンドは横説説のように聞こえました。xdg-mimegnomevfs-infofile -idbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/null 2>&1

答え1

カスタムテキストファイル拡張子を事前に知っている場合は、解決策としてその拡張子の新しいMIMEエントリを登録してください。

たとえば、ファイル拡張子が「.list」の場合:

記述子ファイルの準備:飛行船リスト.xml

<?xml version="1.0"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
  <mime-type type="text/plain">
    <comment>List file type</comment>
    <glob pattern="*.list"/>
  </mime-type>
</mime-info>

新しいMIMEエントリを登録します。

%xdg-mime install zeppelin-list.xml

尋ねる:

%xdg-mime query filetype my.list
text/plain

答え2

xdg-mimeデスクトップ環境の重要なコンポーネントなので、その動作を変更しようとしないでください。ミッションクリティカルスクリプトの破損に関するあなたの懸念を理解してください。ただし、稼働中のシステムとテストシステムで異なる結果が生成される場合、すでに故障したので修理しなければなりません。もともと、

file -b --mime-type <file>

簡単な交換です

xdg-mime query filetype <file>

そして、これを変更するのは苦痛ではありません。特に好みの動作が次のような場合であればさらにそうですfile -i

このxdg-*コマンドは、実行中のデスクトップ環境に基づいて設計されています(プレフィックスはX DデスクトップGグループ)原則として、ユーザーとの対話のためではないスクリプトではまったく使用しないでください。

すべてのシステムでまったく同じ動作が必要な場合は、file常に同じ方法で実行される同様のコマンドを使用してください。可能バージョンの違いはわずかですが避けられません。)

すべてのシステムで「最もスマートな」動作をしたい場合は、これらのラッパーコマンドを使用して、すべてのシステムでxdg-mime「最もスマートな」アイデアに適応する準備をします。

誤ったアプローチは、環境依存プログラムが同じように動作するように各環境を変更しようとすることです。

関連情報