Как открыть конкретное приложение, такое как 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.

miguelmorin
источник
Я никогда не использовал 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 &
Ravexina
источник
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 и перенаправление вывода для каждой команды, которую вы запускаете, становится утомительным, может иметь смысл определить пользовательский ярлык)
недоделанная аплодисменты Моника