이메일을 생성하기 위해 실행하는 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
}
세 번째는 명령이 0을 반환하고 DE가 gnome으로 설정되어 있기 때문에 over가 사용되도록 하는 것 elif
입니다 . 매뉴얼 페이지를 보려고 했지만 명령이 횡설수설처럼 들렸습니다.xdg-mime
gnomevfs-info
file -i
dbus-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-*
명령은 실행 중인 데스크탑 환경에 따라 설계되었습니다(접두사는엑스 디데스크탑G그룹) 원칙적으로 사용자 상호 작용을 위한 것이 아닌 스크립트에서는 전혀 사용해서는 안 됩니다.
모든 시스템에서 정확히 동일한 동작을 원한다면 file
항상 동일한 방식으로 실행되는 유사한 명령을 사용하십시오.가능한버전 차이는 미미하지만 불가피합니다.)
모든 시스템에서 "가장 스마트한" 동작을 원한다면 이러한 래퍼 명령을 사용 xdg-mime
하고 모든 시스템에서 "가장 스마트한" 아이디어에 적응할 준비를 하십시오.
잘못된 접근 방식은 환경 종속 프로그램이 동일하게 작동하도록 각 환경을 변경하려고 시도하는 것입니다.