'open' comando para abrir um arquivo em um aplicativo

2

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

open index.html

Não deveria abrir este arquivo no meu navegador? Também não posso 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
    
por Edgar Oliveira 05.01.2016 / 14:24

3 respostas

6

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

xdg-open index.html

xdg-open não tem um equivalente de open -a do OSX para abrir um arquivo em um aplicativo específico. Isso 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

Linux, como outros sistemas Unix (mas não, 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 eles 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 PATH variable ; Executar sublime_text procura um arquivo chamado sublime_text nos diretórios listados em PATH . O OS X precisa de um nível extra de indireção, por meio de open -a , para manipular 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 forma que não precisa de um.

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

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

Substitua pelo caminho onde o executável sublime_text é, obviamente.

O comando open que você encontrou é um nome antigo para o comando openvt (algumas distribuições do Linux inclua-o apenas sob o nome openvt ). O comando openvt cria um novo console virtual , que só pode ser feito por root e não é usado com muita frequência em este século, uma vez que a maioria das pessoas só trabalha em um ambiente de janela gráfica.

    
por 06.01.2016 / 01:51
5

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

Em algumas distribuições do Linux, o comando open é um link simbólico para o Comando openvt que abre um binário em um novo console virtual. Isso é aparentemente não é o que você quer. Suas mensagens de erro indicam que você invocou o comando openvt . Este comando espera um programa binário (um executável) como argumento.

Suponho que você queira dizer xdg-open , que, 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 passar arquivos e URLs como argumentos.

Portanto xdg-open index.html deve abrir o arquivo no seu navegador, xdg-open image.png deve abrir o arquivo no seu visualizador de imagens, etc.

    
por 05.01.2016 / 17:42
1

Embora as pessoas geralmente nomeiem xdg-open como emulando a funcionalidade de open , abrir é um pouco diferente porque 1. não redireciona nada de stdout / stedrr e 2. desanexa o que você deseja executar a partir do terminal (que é quase sempre o que você quer ao lançar aplicativos GUI para que você não tenha terminais disponíveis)

Para resolver isso, criei um equivalente apropriado 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
    
por 20.09.2018 / 02:38