Linux-эквивалент команды Mac OS X «открыть» [закрыто]


214

Я нашел команду «открыть» в Mac OS X очень удобной в командной строке. Из "Человек открыт":

Команда openоткрывает файл (или каталог, или URL), как если бы вы дважды щелкнули значок файла. Если имя приложения не указано, приложение по умолчанию, определенное с помощью LaunchServices, используется для открытия указанных файлов.

То есть, если я хочу открыть файл PDF с помощью программы просмотра PDF по умолчанию (бывает Preview), мне нужно только сделать:

open my.pdf

В Linux, однако, чтобы открыть файл PDF из командной строки, мне пришлось покопаться, чтобы найти средство просмотра PDF по умолчанию, например, «evince» (кто бы мог догадаться ??), а затем

evince my.pdf

Итак, есть ли простой эквивалент команды open в командной строке Linux?

Спасибо!


6
Может быть, этот вопрос стоит перенести на superuser.com?
quazgar

1
Суперпользователь кажется неуместным - существует ли StackOverflow для «обычных пользователей» или, возможно, «программистов, которые хотят создавать сценарии для других приложений», то есть для автоматизации?
Крейзи Глеу

Аскубунту может подойти.
Гоферхан

Ответы:


238

Вы можете попробовать xdg-open, большинство дистрибутивов Linux имеют это. Откроется приложение, связанное с вашим файлом по умолчанию.

К вашему сведению https://portland.freedesktop.org/doc/xdg-open.html


13
Однако большая разница между этим и тем open, что он не открывает файл / приложение в фоновом режиме. Приложения для Linux кажутся очень болтливыми и часто выводят несколько строк диагностики и предупреждений прямо в ваш терминал (хотя на самом деле ничего не пошло не так). Я обычно должен сделать что-то вроде xdg-open <file> &> /dev/null &этого. Есть ли что-нибудь лучше, чем xdg-open в этом отношении?
Суан

13
@Suan: приложение открывается в фоновом режиме, отдельно от терминала, так что вы можете продолжить работу в терминале, как только приложение будет запущено. Так что трейлинг &не нужен. Что касается «нескольких линий диагностики», то они взяты из самого приложения, а не из xdg-open. Если вам не нужны какие-либо выходные данные, вам &> /dev/nullдаже нужно использовать их evinceнапрямую (пример OP), поэтому ваша жалоба является недействительной. xdg-openэто действительно путь.
MestreLion

15
@MestreLion Я не думаю, что жалоба является полностью недействительной, поскольку открытие Mac не приводит к выводу вывода приложения в терминал.
Макс Нанаси

7
@MaxNanasy: вывод из приложений, это не xdg-openвина, если они болтливы. И подавление таких сообщений должно быть выбором пользователя , а не XDG. Так что это пустая жалоба просить что-то «лучше», чем xdg-open. Кроме того, если у Mac openнет возможности выводить эти сообщения, я бы сказал, что openэто гораздо хуже, чем xdg-open, поскольку, когда вы используете командную строку для запуска файлов, вы обычно заинтересованы в этом выводе (в противном случае, почему бы просто не дважды щелкнуть файл в браузере, как Nautilus?)
MestreLion

12
@MestreLion Хотя можно утверждать, что жалоба тривиальна, поскольку alias open='xdg-open &>/dev/null'приводит примерно к желаемому поведению (хотя ошибки самого xdg-open (в отличие от только что запущенной программы) также будут игнорироваться, что нежелательно).
Макс Нанаси

76

Вы ищете эквивалент xdg-open, который можно использовать так же, как openкоманду OS X. Например:

xdg-open ~/Documents/Chubby_Bubbies.odt

Тем не менее, это действительно трудно набрать быстро и точно. Вместо этого вы должны создать псевдоним xdg-open, что значительно ускоряет процесс.

Конечно, вы можете использовать псевдоним, чтобы openон соответствовал OS X (вы можете выбрать все, что захотите), но лично я использую правую квадратную скобку ( ]) для быстрого доступа по соображениям скорости. Чтобы использовать это, добавьте следующее в ваш .bashrcфайл:

alias ']'='xdg-open'

Затем, чтобы открыть любой ресурс, используйте его как любой из этих примеров:

] www.google.com
] file.txt
] ~/Pictures
] ssh://myserver.local/home/jeremy

Также это позволяет открыть файловый браузер (например, Nautilus) в текущем каталоге:

] .

По опыту я обнаружил, что однобуквенные псевдонимы лучше всего подходят для вышеупомянутого ярлыка. В конце концов, цель - эффективность. И вы можете вернуться и сделать тот же псевдоним на OS X - я оставляю это в качестве упражнения для читателя. :-)


26
Я сделал псевдоним «open» для «xdg-open», чтобы обеспечить его согласованность как в Linux, так и в Mac.
Адам Быртек

Это хорошо, но не замечательно, я попытался открыть файл .url и открыл его в gedit.
Сорин

18
@sorin Ты пытаешься заставить это звучать так, как будто это моя вина ?!
Джереми Виссер

7
@sorin: xdg-openоткрывает приложение по умолчанию для вашей системы. В вашем случае .urlфайлы открываются в gedit. Если вы хотите изменить это, щелкните правой кнопкой мыши файл в Nautilus и перейдите в Свойства> Открыть с помощью, чтобы изменить приложение по умолчанию, и оно xdg-openбудет работать соответствующим образом.
MestreLion

Вот Gist, который я сделал, просто скопируйте и вставьте команду в разделе «Все» в первом комментарии.
ozanmuyes

14

Я сам разобрался с этим, так что подумал, что напишу, как я это сделал, что особенно важно для того, что просила Суан. Эти шаги позволяют вам просто напечатать "open", а не ваш терминал, покрытый сообщениями, которые вам не нужны:

Создайте скрипт с именем openin ~/bin, содержимое просто:

xdg-open "$1" &> /dev/null &

Сохраните и закройте скрипт, затем введите «source .profile» (или .bash_profile, если необходимо). Вот так, набрав «open Music», вы откроете вашу музыкальную папку в графическом интерфейсе nautilus и не должны ничего вводить в ваш терминал.


Что с псевдонимом и странным местоположением? Просто позвоните самому сценарию openи поместите его в свой PATH (обычно в $HOME/bin/open)
tripleee

На моей машине (Ubuntu 11.10), если вы добавляете скрипт с именем 'open' к своему пути и пытаетесь сделать так, чтобы он был переопределен / bin / open. Поэтому я не могу найти способ заставить тебя работать без псевдонима.
Anake

Хитрость заключается в том, чтобы иметь свой собственный скрипт в каталоге, который появляется раньше, PATHчем в /bin. По соглашению, если он у вас есть, $HOME/binон будет добавлен в начало PATH, перед любыми системными каталогами. Как правило, это сделано вашим .profileили подобным. Например, по умолчанию .profileв Ubuntu делает именно это.
трипл

2
Перенаправление вывода на /dev/nullэто немного капризно; возможно, вы могли бы перенаправить вывод $HOME/.xsession-errorsили что-то в этом роде, чтобы диагностика не была полностью потеряна в случае необходимости устранения неполадок.
трипл

1
@efdee: правильное цитирование всех переменных является хорошей практикой программирования и жизненно важно в скриптах bash. Это не имеет ничего общего xdg-open, это проблема оболочки.
MestreLion

11

Традиционно вы можете использовать команду «видеть». Который просто использует run-mailcap. Это будет работать без Gnome, X и т. Д.

man see

3
Проблема в том, что run-mailcap(и во многих его псевдонимах) используется отдельная (и ужасно устаревшая) база данных ассоциации приложений. Например, в моей системе, хотя .mp3песни правильно открываются в VLC, .txtфайлы открываются меньше (вместо gedit), а .pdfфайлы просто не открываются! (Ошибка: не найдены правила «просмотра» mailcap для типа «application / pdf»)
MestreLion

Как я уже сказал, это зависит от каждой системы. Немногие приложения регистрируют себя так, чтобы run-mailcapих распознавали. xdg-openвнутреннее использование gvfs-open(в системах Gnome, таких как Ubuntu), которое, в свою очередь, использует спецификацию базы данных mime базы данных xdg, которую используют гораздо больше приложений.
MestreLion

Открыл более 50 страниц PDF gimpдля меня. Я буду придерживаться xdg-open.
user1717828

Открытие txt файлов в lessx''D
Тимо

4

гном открыть


7
gnome-open теперь устарела и, кроме того, уже использовалась внутри, xdg-openесли пользователь был в Gnome (теперь он использует gvfs-open)
MestreLion

2

Если у вас правильно настроены мимы, вы можете использовать mimeopen. Проверьте его справочную страницу, так как она имеет несколько полезных опций.


1
Было бы хорошо, если бы этот ответ был расширен. Мне было бы интересно посмотреть, как это работает
Магнус

-3

В среде Gnome Desktop я использую следующую команду:

nautilus `pwd` &

Это похоже на «открытый». команда в Mac


11
Этот ответ имеет несколько проблем: A) Он открывает текущий каталог, а не файл, как того требовал пользователь. B) вы можете использовать .вместо " pwd" C) если вы измените pwdфайл, пользователю все равно нужно будет нажать ENTER после того, как Nautilus откроет D) Открытие nautilus первым только для того, чтобы открыть файл, является очень косвенным решением.
МестреЛион
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.