Я нашел команду «открыть» в Mac OS X очень удобной в командной строке. Из «человек открытый»:
The
opencommand opens a file (or a directory or URL), just as if you had double-clicked the file's icon. If no application name is specified, the default application as determined via LaunchServices is used to open the specified files.
То есть, если я хочу открыть PDF-файл с помощью программы просмотра PDF по умолчанию (бывает, что это предварительный просмотр), мне нужно только сделать:
open my.pdf
В Linux, однако, чтобы открыть файл PDF из командной строки, мне пришлось порыться, чтобы найти, что программа просмотра PDF по умолчанию, например, "evince" (кто бы мог подумать ??), а затем
evince my.pdf
Итак, есть ли простой эквивалент команды open в командной строке Linux?
Спасибо!
Суперпользователь кажется неуместным - существует ли StackOverflow для «обычных пользователей» или, возможно, «программистов, которые хотят создавать сценарии для других приложений», то есть автоматизировать?
Аскубунту может подойти.





Вы можете попробовать xdg-open, он есть в большинстве дистрибутивов Linux. Откроется приложение, связанное с вашим файлом по умолчанию.
FYI https://portland.freedesktop.org/doc/xdg-open.html
Однако большая разница между этим и open заключается в том, что он не открывает файл / приложение в фоновом режиме. Приложения Linux кажутся очень болтливыми и часто выводят несколько строк диагностики и предупреждений прямо в ваш терминал (хотя на самом деле ничего не пошло не так). Вместо этого мне обычно приходится делать что-то вроде xdg-open <file> &> /dev/null &. Что может быть лучше xdg-open в этом плане?
@Suan: он открывает приложение в «фоновом режиме», отсоединившись от терминала, таким образом, вы можете продолжить работу в терминале, как только приложение будет запущено. Таким образом, замыкающий & не нужен. Что касается «нескольких строк диагностики», то они взяты из самого приложения, а не из xdg-open. Если вам не нужен какой-либо вывод, вам понадобится &> /dev/null, даже если вы используете evince напрямую (пример OP), поэтому ваша жалоба не будет действительной. xdg-open - действительно правильный выбор.
@MestreLion Я не думаю, что жалоба полностью недействительна, поскольку открытие Mac не приводит к тому, что вывод приложения выводится на терминал.
@MaxNanasy: вывод из приложений, это не вина xdg-open, если Oни болтливы. И подавление таких сообщений должно быть выбором пользователь, а не xdg. Так что просить о чем-то «лучше», чем xdg-open, не имеет смысла. Кроме того, если open Mac не имеет возможности выводить эти сообщения, я бы сказал, что open - это намного хуже, чем xdg-open, поскольку, когда вы используете командную строку для запуска файлов, этот вывод обычно вас интересует (в противном случае почему бы просто дважды не щелкнуть значок файл в браузере, таком как Nautilus?)
@MestreLion Вариант использования, который я и, вероятно, большинство пользователей Mac, чаще всего использую open, - это если я уже использую терминал, но хочу открыть файл с помощью приложения с графическим интерфейсом (например, я нахожусь в папке с изображением, которое я хочу просмотреть, поэтому я запускаю open image.png, вместо того, чтобы повторно переходить к папке в Finder). Если я действительно хочу просмотреть сообщения отладки из приложения с графическим интерфейсом, я открываю консоль, в которой есть представление журнала консоли, в котором отображаются сообщения от всех запущенных приложений.
@MestreLion PS: Я не говорю, что open лучше или хуже, чем xdg-open: я просто отрицаю, что жалоба Суана недействительна, поскольку две системы ведут себя по-разному, а Суан предпочитает один аспект поведения одной системы.
@MestreLion Хотя можно утверждать, что жалоба тривиальна, поскольку alias open='xdg-open &>/dev/null' дает примерно желаемое поведение (хотя ошибки от самого xdg-open (в отличие от только запущенной программы) также будут подавляться, что нежелательно).
@MaxNanasy: мы оба согласны с тем, что единственное различие в каждом инструменте - это их поведение по умолчанию в отношении вывода: open по умолчанию отключает вывод (есть ли способ сделать его "отключать"?), А xdg-open, как и большинство инструментов терминала Linux, не заглушает вывод своего приложения. И это разумный дефолт, ИМХО, т.к. А) Самостоятельно отключить, если хочешь; Б) приложения могут выводить важные сообщения, а не только диагностические сообщения и предупреждения.
xdg-open не открывает несколько файлов, например "open" в OSX: open image*.jpg Может потребоваться обходной путь: ls *.jpg | while read -r file; do xdg-open "$file"; done
как насчет "open -a", я пытаюсь решить эту проблему, но на linux apple.stackexchange.com/questions/75221/…
гном-открытый
gnome-open теперь устарел, и, кроме того, он уже использовался внутри xdg-open, если пользователь был на Gnome (теперь он использует gvfs-open)
Эквивалент, который вы ищете, - это xdg-open, который можно использовать так же, как команду OS X open. Например:
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 - я оставляю это в качестве упражнения для читателя. :-)
Я сделал псевдоним от «open» до «xdg-open», чтобы он был согласован как на Linux, так и на Mac.
Это хорошо, но не очень, я попытался открыть файл .url и открыл его в gedit.
@sorin: xdg-open открывает приложение вашей системы по умолчанию для файла. В вашем случае файлы .url открываются в gedit. Если вы хотите изменить это, щелкните правой кнопкой мыши файл в Nautilus и выберите «Свойства»> «Открыть с помощью», чтобы изменить приложение по умолчанию, и xdg-open будет работать соответствующим образом.
Традиционно можно использовать команду «увидеть». Которая просто использует run-mailcap. Это будет работать без Gnome, X и т. д.
man see
Проблема в том, что run-mailcap (и его множество псевдонимов) использует отдельную (и ужасно устаревшую) базу данных ассоциаций приложений. Например, в моей системе, в то время как песни .mp3 правильно открываются в VLC, файлы .txt открываются меньше (вместо gedit), а файлы .pdf просто не открываются! (Ошибка: для типа "application / pdf" не найдено правил mailcap "просмотра")
Как я уже сказал, это зависит от каждой системы. Некоторые приложения регистрируются так, как их распознает run-mailcap. xdg-open внутренне использует gvfs-open (в системах Gnome, таких как Ubuntu), который, в свою очередь, использует спецификацию базы данных mime xdg, которую используют гораздо больше приложений.
Открыл для меня более 50 страниц PDF на gimp. Я буду придерживаться xdg-open.
Открытие txt файлов в less x''D
Я просто разобрался с этим сам, поэтому подумал, что запишу, как я это сделал, что особенно относится к тому, о чем просила Суан. Эти шаги позволяют вам просто ввести «open», а не ваш терминал, покрытый сообщениями, которые вам не нужны:
Создайте сценарий под названием open в ~/bin, содержимое будет просто:
xdg-open "$1" &> /dev/null &
Сохраните и закройте скрипт, затем введите «исходный .profile» (или .bash_profile, если необходимо). Вот так, набрав «open Music», вы откроете папку с музыкой в графическом интерфейсе nautilus и ничего не введете в ваш терминал.
Что с псевдонимом и странным местоположением? Просто вызовите сам скрипт open и поместите его в свой PATH (обычно в $HOME/bin/open)
На моей машине (ubuntu 11.10), если вы добавляете скрипт с именем open на свой путь и пытаетесь сделать это, он перекрывается / bin / open. Так что я не могу найти способ заставить вас работать без псевдонима.
Уловка состоит в том, чтобы иметь собственный сценарий в каталоге, который находится в вашем PATH раньше, чем /bin. По соглашению, если у вас есть $HOME/bin, он будет добавлен в начало PATH перед любыми системными каталогами. Обычно это делает ваш .profile или аналогичный. Например, .profile по умолчанию в Ubuntu делает именно это.
ааа понятно спасибо я отредактирую свой ответ
Перенаправление вывода на /dev/null немного капризно; возможно, вы могли бы перенаправить вывод на $HOME/.xsession-errors или что-то подобное, чтобы диагностика не была полностью потеряна, если вам нужно что-то устранить.
Мне пришлось использовать "$ 1" вместо $ 1 (включая кавычки), чтобы xdg-open не запутался в пробелах в именах файлов.
@efdee: правильное цитирование переменных все является хорошей практикой программирования и жизненно важно в сценариях bash. Это не имеет ничего общего с xdg-open, это проблема оболочки.
Также & в итоге не нужен: xdg-open в gnome использует gvfs-open, который уже открывает приложения в фоновом режиме. И IMHO перенаправление не должно использоваться: открытие файлов в терминале обычно означает, что вы являются заинтересованы в сообщениях об отладке / ошибках. В противном случае, почему бы просто не использовать вместо этого Наутилус?
На Mac Finder запоминает настройки просмотра (боковая панель, панель инструментов, режим просмотра и т. д.) Для каждого каталога. Я думаю, что он хранит их в скрытом файле (возможно, .DS_Store?). Он даже запоминает состояние открытых / закрытых элементов в древовидной структуре! Поэтому, когда я работал с Vim над репозиторием Git, я обычно набирал «open». для начала. Это открыло бы красивое древовидное представление без всего мусора (боковая панель / панель инструментов), и оно всегда открывалось бы там, где это было в последний раз. По сути, действительно хороший и удобный способ просмотра моего репо и перетаскивания файлов в Vim (я люблю Vim, но ненавижу тупые окна текстового режима).
xdg-open не всегда запускает его в фоновом режиме, сейчас я использую KDE. Также xdg-open не совсем эквивалент open или cygstart Cygwin. Открываемое приложение должно открываться полностью независимо от терминала, а не быть частью дерева процессов терминала, что означает, что оно должно быть отсоединено, а его сообщение об ошибке должно передаваться на ~/.xsession-errors.
Также xdg-open в настоящее время не открывает файлы *.desktop. Поэтому я не могу просто открыть приложение без открытия ассоциации файлов.
В моем ~ / .zshrc я добавил: alias open = "xdg-open &>/dev/null ".
В среде рабочего стола Gnome я использую следующую команду:
nautilus `pwd` &
Это похоже на «открытый». команда в Mac
В этом ответе есть несколько проблем: A) Он открывает текущий каталог, а не файл, по запросу пользователя. B) вы можете использовать . вместо "pwd" C) если вы измените pwd для файла, пользователю все равно нужно будет нажать ENTER после открытия Nautilus D) Сначала открыть наутилус только для Это, чтобы открыть файл, является очень косвенным решением.
Если у вас правильно настроены mimes, вы можете использовать mimeopen. Ознакомьтесь с его справочной страницей, так как в ней есть несколько полезных опций.
Было бы неплохо, если бы этот ответ был расширен. Мне было бы интересно посмотреть, как это работает
Может, этот вопрос стоит перенести на superuser.com?