Como abrir um aplicativo específico como o macOS `open -a`?

14

No macOS no Terminal padrão em execução bash, posso digitar:

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

para abrir um URL com o Firefox ou outro navegador. Também funciona para iniciar um programa, por exemplo open -a maps, e para abrir um arquivo no programa padrão, por exemplo open file.pdf.

Como posso fazer o mesmo no Ubuntu no Terminal GNOME padrão também em execução bash? Eu sei que posso abrir um arquivo ou URL com xdg-open /path/to/filee posso abrir o navegador padrão com sensible-browser. O Ubuntu tem um comando geral para abrir arquivos, aplicativos ou arquivos em aplicativos específicos?

Eu estou correndo bashem ambas as máquinas, 3.2.57(1)-releaseno MacOS e 4.4.19(1)-releaseno Ubuntu.

miguelmorin
fonte
Eu nunca usei um Mac, então você pode me dizer por que usaria open -a Firefox http://www.wikipedia.org? Você não pode fazer firefox http://www.wikipedia.org? Parece um recurso inútil de open, quando abrir programas é o ponto principal bash.
JOL
1
O Bash no macOS funciona de maneira diferente, por exemplo, seu comando fornece o erro bash: firefox: command not found. Mesmo erro com o Firefoxnome do programa.
Miguelmorin 4/10
3
bashfunciona exatamente da mesma maneira; é o Firefox instalado de forma diferente do Ubuntu. No macOS, você pode, por exemplo, executar /Applications/Firefox.app/Contents/MacOS/firefox-binna linha de comando. Firefox.appé um tipo especial de pasta que não contém apenas o executável, mas arquivos que no Linux pode ser espalhados em vários /usr/bin/, /usr/lib, /etc, etc. diretórios. O Finder sabe como executar o aplicativo real quando você, por exemplo, clica duas vezes em Firefox.app. opené uma maneira de "executar" a pasta especial na linha de comando.
Chepner # 4/18
4
Não é que isso bashfuncione de maneira diferente: o Firefox está instalado como um aplicativo OS X ( Firefox.app) e não está no PATH comum. Outro motivo para usar open -aé que o aplicativo é iniciado em segundo plano corretamente, em vez de esperar até que ele saia.
Alexis4

Respostas:

10

Você pode usar especificamente o nome do programa desejado (se ele puder ser usado como uma ferramenta de linha de comando).

Por exemplo, URLs:

firefox duckduckgo.com
chromium-browser askubuntu.com

PDF:

evince foo.pdf
okular bar.pdf

Imagens:

gpicview foo.png
feh bar.jpeg

Texto:% s:

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

Vídeo / Música:

mpv  foo.mp3
vlc  bar.mp4

Se você deseja que o programa seja executado desanexado do terminal, é assim que eu prefiro:

nohup program args &

Por exemplo:

nohup firefox askubuntu.com &

Lembre-se de que você sempre pode redirecionar as saídas como de costume, por exemplo:

nohup firefox duckduckgo.com &> /dev/null &
Ravexina
fonte
2
eog picture.jpgpara imagens demasiado se você tiver gnome-desktop instalado :)
Videonauth
1
); @Videonauth Sim, ou qualquer outro tipo de ferramentas
Ravexina
2
@BaptisteCandellier Não tenho o objetivo de ligar openpara outro programa. Por que não chamar o outro programa diretamente? Que utilidade openadiciona? Esta resposta reflete a coisa natural a ser feita para abrir aplicativos específicos.
JOL
1
@BaptisteCandellier Concordo e openno macOS funciona para abrir arquivos e pastas no aplicativo padrão e em aplicativos específicos. Parece que o original bashseguiu um caminho diferente com os xdg-openarquivos e os nomes dos aplicativos para o restante.
Miguelmorin 04/10/19
2
Outra coisa diferente openno MacOS é que ele lança o aplicativo desanexado do console em que é executado, ou seja, se o console for fechado, o aplicativo permanecerá ativado. No Ubuntu, é preciso usar o nohupcomando para obter o mesmo comportamento. (desde prefixar cada comando com nohup e redirecionar a saída para cada comando é executado fica cansativo, pode fazer mais sentido para definir um atalho personalizado)
undercat aplaude Monica