Как открыть конкретное приложение, такое как macOS `open -a`?


14

На macOS в терминале по умолчанию bash, я могу набрать:

open -a Firefox http://www.wikipedia.org

открыть URL с помощью Firefox или другого браузера. Он также работает для запуска программы, например open -a maps, и для открытия файла в программе по умолчанию, например open file.pdf.

Как я могу сделать то же самое в Ubuntu в работающем по умолчанию терминале GNOME bash? Я знаю, что могу открыть файл или URL с помощью xdg-open /path/to/file, и я могу открыть браузер по умолчанию с sensible-browser. Есть ли в Ubuntu общая команда для открытия файлов, приложений или файлов в определенных приложениях?

Я работаю bashна обеих машинах, 3.2.57(1)-releaseна MacOS и 4.4.19(1)-releaseна Ubuntu.


Я никогда не использовал Mac, так что вы можете сказать мне, почему вы используете open -a Firefox http://www.wikipedia.org? Вы не можете сделать firefox http://www.wikipedia.org? Кажется, бесполезная особенность open, когда открытие программ является самой точкой bash.
— JoL

1
Bash на macOS работает по-другому, например, ваша команда выдает ошибку bash: firefox: command not found. Та же ошибка, что и Firefoxв названии программы.
— Мигельморин

3
bashработает точно так же; это Firefox, который устанавливается не так, как в Ubuntu. В macOS вы можете, например, запустить /Applications/Firefox.app/Contents/MacOS/firefox-binиз командной строки. Firefox.appэто особый вид папки , которая содержит не только исполняемый файл, но файлы в Linux могут быть разбросаны в различных /usr/bin/, /usr/lib, /etcи т.д. каталогов. Finder знает, как запустить собственное приложение, когда вы, например, дважды щелкаете мышью Firefox.app. openэто способ «запустить» специальную папку из командной строки.
— chepner

4
Дело не в том, что bashработает по-другому: Firefox устанавливается как приложение OS X ( Firefox.app) и не находится в обычном PATH. Другая причина использования open -aзаключается в том, что он правильно создает фон для запускаемого приложения, вместо того, чтобы ждать его завершения.
— Алексис

Ответы:


10

Вы можете специально использовать имя нужной программы (если она может использоваться в качестве инструмента командной строки).

Например, URL:

firefox duckduckgo.com
chromium-browser askubuntu.com

PDF:

evince foo.pdf
okular bar.pdf

Картинки:

gpicview foo.png
feh bar.jpeg

Тексты:

gedit foo.txt
mousepad /etc/config
leafpad bar.xml

Видео / Музыка:

mpv  foo.mp3
vlc  bar.mp4

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

nohup program args &

Например:

nohup firefox askubuntu.com &

Помните, что вы всегда можете перенаправить выходы как обычно, например:

nohup firefox duckduckgo.com &> /dev/null &

2
eog picture.jpgдля изображений тоже, если у вас установлен gnome-desktop :)
— Videonauth

1
@Videonauth Да, или любой другой инструмент;)
— Ravexina

2
@BaptisteCandellier У меня нет смысла звонить, openчтобы вызвать другую программу. Почему бы просто не вызвать другую программу напрямую? Какую полезность openдобавляет? Этот ответ отражает естественное, что нужно сделать, чтобы открыть определенные приложения.
— JoL

1
@BaptisteCandellier Я согласен, и openна MacOS работает как для открытия файлов и папок в приложении по умолчанию и в конкретных приложениях. Кажется, оригинал bashпошел по другому пути с xdg-openфайлами и именами приложений для остальных.
— Мигельморин

2
Другая особенность openMacOS заключается в том, что он запускает приложение, отсоединенное от консоли, с которой запускается, т. Е. Если консоль закрывается, приложение остается включенным. В Ubuntu нужно использовать nohupкоманду, чтобы получить то же поведение. (Поскольку префикс каждой команды с nohup и перенаправление вывода для каждой команды, которую вы запускаете, становится утомительным, может иметь смысл определить пользовательский ярлык)
— недоделанная аплодисменты Моника
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.