xdg-пантомима является частью набора сценариев, названных xdg-utils, "ряд единых интерфейсов для настольных сред (DE)". В Вашем особом случае я просто заключу комментарий MestreLion в кавычки отсюда:
Если у Вас нет настольной среды, Вы не должны использовать xdg-пантомиму (или никакой другой xdg инструмент). xdg предназначен для обеспечения совместимости между различными настольными средами, но не, когда нет ни одного. Думайте о xdg как о настольном агностике, но не "настольном атеисте"
Относительно внутренней механики xdg-utils... Они - просто проверка сценариев оболочки DE и, ЕСЛИ найдено, называя что инструменты файла конкретного DE для выполнения определенной задачи. В GNOME xdg-прослушивания gvfs-открываются и gvfs-информация о вызовах xdg-пантомимы (оба gvfs -* инструменты, дающие предпочтение решению расширением файла). В Вашем случае никакой DE не найден так, xdg-пантомима отступает к file
[1] получить информацию о типе контента файла. Вот секция кода от xdg-пантомимы для "универсального" DE (или довольно неизвестна):
info_generic() { DEBUG 1 "Running file -i \"$1\"" /usr/bin/file -i "$1" 2> /dev/null | cut -d ":" -f 2 | sed s/"^ "// if [ $? -eq 0 ]; then exit_success else exit_failure_operation_failed fi }
Хотя это верно file
[1] результаты не всегда на 100% точны, нет очень, можно сделать о том (это - все еще лучший инструмент для этого задания IMO). Однако, если Вы хотите определить типы пантомимы, базирующиеся только на расширениях файлов (а-ля окна), Вы могли записать свой собственный сценарий. Вот простой пример Python:
#!/usr/bin/python2
import os
import sys
import mimetypes
if len(sys.argv) != 2:
print ("Usage: ./pymime filename")
raise SystemExit
testfile = os.path.abspath(sys.argv[1])
mt = mimetypes.guess_type(testfile, strict=True)[0]
print ("%s" % mt)
sys.exit(0)
Назовите это pymime и работайте:
./pymime yourfile
Меньше может определить, дали ли этому каталог. Установите LESSOPEN
переменная среды к ~/bin/LESSPIPE
и сделайте ~/bin/LESSPIPE
сценарий как следующее:
#!/bin/sh
if [ -d "$1" ]; then
exec /bin/ls -la "$1"
elif [ -f "$1" ]; then
case "$1" in
*.tar|ztar) exec tar tvvf "$1" 2>/dev/null;;
*.tar.[dg]z|*.tar.z|*.tgz) exec gzip -dc "$1" | tar tvvf - 2>/dev/null;;
*.tar.bz2) exec bzip2 -d <"$1" 2>/dev/null | exec tar tvvf - 2>/dev/null;;
*.tar.Z|*.taz) exec uncompress -c "$1" | exec tar tvvf - 2>/dev/null;;
*.zip) exec unzip -l "$1" 2>/dev/null;;
*.lha) exec lha -v "$1" 2>/dev/null;;
*.7z) exec 7z l "$1" 2>/dev/null;;
*.[rs]pm) exec rpm -qilp "$1";;
*.z|*.[dg]z) exec gzip -dc "$1" 2>/dev/null;;
*.bz2) exec bzip2 -dc "$1";;
*.xz) exec xz -dc "$1";;
*.Z) exec uncompress -c "$1" 2>/dev/null;;
esac
fi
Вы получите список для каталогов и архивов.
Можно использовать lesskey
вместо переменной среды для установки препроцессора. См. документацию для деталей.
В ударе Вы могли легко создать функцию, чтобы сделать это:
function less_ls()
{
# True if file exists and is a regular file.
if [ -f "${1}" ]
then
less "${1}"
else
ls "${1}"
fi
}
Очевидно, можно переименовать функцию в то, что Вы хотите путем замены less_ls
часть, если Вы называете его less
это будет иметь приоритет исполняемого файла less
. Если Вы хотите, чтобы это было определено автоматически каждый раз, когда Вы запускаете Bash, который Вы могли бы скопировать, вставляют его в Ваш ~/.bashrc
файл.