Comando `open` para abrir um arquivo em um aplicativo


13

Por que não consigo executar este comando no meu terminal:

open index.html

Não era para abrir esse arquivo no meu navegador? Também não pode executar este comando: open index.html -a "Sublime Text". O resultado desses comandos são:

$ open index.html
Couldn't get a file descriptor referring to the console

$ open index.html -a "Sublime Text" - 
open: invalid option -- 'a' 
Usage: open [OPTIONS] -- command

2
Suponho que você queira dizer xdg-openqual deve abrir o arquivo no seu navegador. O opencomando é um link para o openvtcomando e abre um binário em um novo console virtual. Aparentemente, não é isso que você deseja.
Marco

1
Supondo que você esteja em um sistema OSX? Não acredito que exista algum opencomando no Linux.
slm

1
@slm, como Marco aponta, existe um opencomando no Linux, vinculado a openvt; as mensagens de erro na pergunta são consistentes com essa situação.
Stephen Kitt

xdg-open filename_or_URL
Ijaz Ahmad Khan

1
@ EdgarOliveira Se você deseja abrir um programa (um binário), basta digitar seu nome no terminal. Se você deseja abrir um arquivo com um programa associado, use xdg-open <file>e ele deverá abrir o arquivo com o programa correspondente.
Marco

Respostas:


18

O objetivo principal do opencomando do OS X é abrir um arquivo no aplicativo associado. O equivalente a isso em unidades modernas não OSX é xdg-open.

xdg-open index.html

xdg-opennão possui um equivalente de OSX open -apara abrir um arquivo em um aplicativo específico. Isso ocorre porque a maneira normal de abrir um arquivo em um aplicativo é simplesmente digitar o nome do aplicativo seguido pelo nome do arquivo. Mais precisamente, você precisa digitar o nome do programa executável que implementa o aplicativo.

sublime_text index.html

O Linux, como outros sistemas Unix (mas, até onde eu sei, as partes não-Unixy do OS X), gerencia o software rastreando-o com um gerenciador de pacotes e coloca arquivos individuais onde são usados . Por exemplo, todos os programas executáveis ​​estão em um pequeno conjunto de diretórios e todos esses diretórios estão listados na PATHvariável ; running sublime_textprocura um arquivo chamado sublime_textnos diretórios listados em PATH. O OS X precisa de um nível extra de indireção, open -apara lidar com aplicativos que são descompactados em uma única árvore de diretórios e registrados em um banco de dados de aplicativos. O Linux não possui nenhum banco de dados de aplicativos, mas é organizado de tal maneira que não precisa de um.

Se a execução do sublime_textshell de comando não funcionar, o Sublime Text não foi instalado corretamente. Eu nunca o usei e, aparentemente, vem como um arquivo tar, não como um pacote de distribuição (por exemplo, deb ou rpm), portanto é possível que você precise executar uma etapa extra de instalação. É realmente o trabalho dos criadores do Sublime Text tornar isso automático, mas se eles não o fizeram, provavelmente você pode fazê-lo executando o comando

sudo -s …/sublime_text /usr/local/bin

Substitua pelo caminho em que o sublime_textexecutável está, é claro.

O opencomando que você encontrou é um nome mais antigo para o openvtcomando (algumas distribuições Linux o incluem apenas sob o nome openvt). O openvtcomando cria um novo console virtual , que pode ser feito apenas pela raiz e não é usado com muita frequência neste século, já que a maioria das pessoas só trabalha em um ambiente de janela gráfica.


mas se eu executei este comando "sublime_text indext.html", recebo este resultado "sublime_text: comando não encontrado" Como posso resultar nesse problema?
Edgar Oliveira

@ EdgarOliveira Acho que vejo o problema, aparentemente o Sublime Text não vem com um pacote adequado? Veja minha edição.
Gilles 'SO- stop be evil'

Eu criei um alias para isso: alias sublimetext = '/ opt / sublime_text / sublime_text / home / user / Documents / sandbox / webdeveloper' mas quando executo o "sublimetext", duas janelas são abertas, ao invés de apenas uma! Por quê? Obrigado
Edgar Oliveira

Quando alterei o arquivo .bashrc, tenho a dúvida "Como redefinir o arquivo .bashrc para executar um novo alias, no mesmo terminal em que fiz as alterações?" Google e encontrou a resposta, no Unix e Linux, e só você tem comando "bash" executar e você vai executar o seu novo pseudônimo :)
Edgar Oliveira

7

Você não menciona o sistema operacional que está usando.

Em algumas distribuições Linux, o opencomando é um link simbólico para o openvtcomando que abre um binário em um novo console virtual. Aparentemente, não é isso que você deseja. Suas mensagens de erro realmente indicam que você chamou o openvtcomando. Este comando espera um programa binário (um executável) como argumento.

Suponho que você queira dizer xdg-openque, em contraste com openvt, não espera um executável como argumento, mas um arquivo que está associado a um programa e abre o arquivo com o programa. Você pode transmitir arquivos e URLs como argumentos.

Portanto, xdg-open index.htmldeve abrir o arquivo no seu navegador, xdg-open image.pngdeve abrir o arquivo no visualizador de imagens, etc.


1
O único problema é que o xdg-open abrirá o arquivo no aplicativo padrão para o tipo de arquivo. Você não pode escolher o aplicativo com o xdg-open. Não sei se existe um comando para escolher o aplicativo, mas se você o conhece (como no exemplo "Sublime Text"), será melhor chamar o programa diretamente.
precisa saber é o seguinte

1
@ X3MBoy A ideia por trás da xdg-openchamada é chamar o aplicativo padrão para esse arquivo. Se você quiser usar um programa diferente, basta ligar <program> <file>. Não consigo ver o problema.
Marco

Ele pede a alguns comandos para fazer: open index.html -a "Sublime Text" -É por isso que digo "problema", porque se você costuma xdg-openabrir um arquivo html, há grandes chances de que o arquivo seja aberto pelo navegador e não por um editor de texto como "Sublime Text"
X3MBoy

3

Embora muitas vezes as pessoas xdg-opencitem como emulando a funcionalidade open, o macOS opené um pouco diferente porque 1. não redireciona nada do stdout / stedrr e 2. desanexa o que você deseja executar do terminal (que é quase sempre o que você deseja ao iniciar a GUI aplicativos para que você não tenha terminais por aí)

Para resolver isso, criei um equivalente adequado usando algumas ferramentas GNU padrão (a sintaxe é fish shell, mas a conversão para o bash é trivial):

function open
    for i in $argv
        setsid nohup xdg-open $i > /dev/null 2> /dev/null
    end
end

Adicionado :

Para aqueles que usam o shell bash, aqui está a função:

open ()
{
    for i in $*
    do
        setsid nohup xdg-open $i > /dev/null 2> /dev/null
    done
}

2

Minha solução (usada diariamente) é usar um aliaspara xdg-open.

Basta colocar isso no seu ~/.bashrc:

alias open='xdg-open '

Então feche e reinicie seu shell ou source ~/.bashrc.

Agora você pode abrir qualquer arquivo com esse comando ... de .png a .jpg a .docx a .pdf a .txt.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.