Commande `open` pour ouvrir un fichier dans une application


13

Pourquoi ne puis-je pas exécuter cette commande dans mon terminal:

open index.html

N'était-il pas supposé ouvrir ce fichier sur mon navigateur? Aussi je ne peux pas exécuter cette commande: open index.html -a "Sublime Text". Le résultat de ces commandes est:

$ 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
Je suppose que vous voulez dire xdg-openqui devrait ouvrir le fichier dans votre navigateur. La opencommande est un lien vers la openvtcommande et ouvre un binaire dans une nouvelle console virtuelle. Ce n'est apparemment pas ce que vous voulez.
Marco

1
En supposant que vous êtes sur un système OSX? Je ne crois pas qu'il y ait de opencommande sous Linux.
slm

1
@slm, comme le souligne Marco, il existe une opencommande sous Linux, liée à openvt; les messages d'erreur dans la question sont compatibles avec cette situation.
Stephen Kitt

xdg-open filename_or_URL
Ijaz Ahmad Khan

1
@EdgarOliveira Si vous voulez ouvrir un programme (un binaire) tapez simplement son nom dans le terminal. Si vous souhaitez ouvrir un fichier avec un programme associé, utilisez xdg-open <file>et il devrait ouvrir le fichier avec le programme correspondant.
Marco

Réponses:


18

Le but principal de la opencommande OS X est d'ouvrir un fichier dans l'application associée. L'équivalent de celui sur les unités modernes non OSX est xdg-open.

xdg-open index.html

xdg-openn'a pas d'équivalent d'OSX open -apour ouvrir un fichier dans une application spécifique. En effet, la manière normale d'ouvrir un fichier dans une application est de simplement taper le nom de l'application suivi du nom du fichier. Plus précisément, vous devez taper le nom du programme exécutable qui implémente l'application.

sublime_text index.html

Linux, comme d'autres systèmes Unix (mais pas, pour autant que je sache, les parties non Unixy d'OS X) gère le logiciel en le suivant avec un gestionnaire de paquets et place les fichiers individuels là où ils sont utilisés . Par exemple, tous les programmes exécutables se trouvent dans un petit ensemble de répertoires et tous ces répertoires sont répertoriés dans la PATHvariable ; en cours d'exécution sublime_textrecherche un fichier appelé sublime_textdans les répertoires répertoriés dans PATH. OS X a besoin d'un niveau supplémentaire d'indirection, via open -a, pour gérer les applications qui sont décompressées dans une arborescence de répertoires unique et enregistrées dans une base de données d'application. Linux n'a pas de base de données d'application, mais il est organisé de telle manière qu'il n'en a pas besoin.

Si l'exécution de l' sublime_textinterpréteur de commandes ne fonctionne pas pour vous, alors Sublime Text n'a pas été installé correctement. Je ne l'ai jamais utilisé, et apparemment, il s'agit d'une archive tar, pas d'un package de distribution (par exemple deb ou rpm), il est donc possible que vous ayez besoin de faire une étape d'installation supplémentaire. C'est vraiment le travail des créateurs de Sublime Text de rendre cela automatique, mais s'ils ne l'ont pas fait, vous pouvez probablement le faire vous-même en exécutant la commande

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

Remplacez par le chemin où se trouve l' sublime_textexécutable, bien sûr.

La opencommande que vous avez rencontrée est un nom plus ancien pour la openvtcommande (certaines distributions Linux ne l'incluent que sous le nom openvt). La openvtcommande crée une nouvelle console virtuelle , qui ne peut être effectuée que par root et n'est pas utilisée très souvent au cours de ce siècle, car la plupart des gens ne travaillent que dans un environnement de fenêtre graphique.


mais si j'ai exécuté cette commande "sublime_text indext.html" je reçois ce résultat "sublime_text: command not found" Comment puis-je en résulter ce problème?
Edgar Oliveira

@EdgarOliveira Je pense que je vois le problème, apparemment Sublime Text n'est pas livré avec un package approprié? Voir mon montage.
Gilles 'SO- arrête d'être méchant'

J'ai créé un alias pour cela: alias sublimetext = '/ opt / sublime_text / sublime_text / home / user / Documents / sandbox / webdeveloper' mais quand j'exécute "sublimetext", j'ai ouvert deux fenêtres, au lieu d'une seule! Pourquoi? Merci
Edgar Oliveira

Lorsque j'ai modifié le fichier .bashrc, j'ai le doute "Comment réinitialiser le fichier .bashrc pour pouvoir exécuter un nouvel alias, sur le même terminal où j'ai effectué les modifications?" Recherchez-le sur Google et trouvez la réponse, sous Unix et Linux, et vous seul avez exécuté la commande "bash" et vous exécuterez le vôtre nouvel alias :)
Edgar Oliveira

7

Vous ne mentionnez pas le système d'exploitation que vous utilisez.

Sur certaines distributions Linux, la opencommande est un lien symbolique vers la openvtcommande qui ouvre un binaire dans une nouvelle console virtuelle. Ce n'est apparemment pas ce que vous voulez. Vos messages d'erreur indiquent en effet que vous avez invoqué la openvtcommande. Cette commande attend un programme binaire (un exécutable) comme argument.

Je suppose que vous voulez dire xdg-openqui, contrairement à openvt, n'attend pas un exécutable comme argument, mais un fichier qui est associé à un programme et ouvre le fichier avec le programme. Vous pouvez transmettre des fichiers et des URL comme arguments.

Par conséquent, xdg-open index.htmldevrait ouvrir le fichier dans votre navigateur, xdg-open image.pngdevrait ouvrir le fichier dans votre visionneuse d'images, etc.


1
Le seul problème est que xdg-open ouvrira le fichier dans l'application par défaut pour le type de fichier. Vous ne pouvez pas choisir l'application avec xdg-open. Je ne sais pas s'il existe une commande pour choisir l'application, mais si vous connaissez l'application (comme dans l'exemple "Sublime Text"), il sera préférable d'appeler directement le programme.
X3MBoy

1
@ X3MBoy L'idée derrière l' xdg-openappel est d'invoquer l' application par défaut pour ce fichier. Si vous souhaitez utiliser un autre programme, appelez simplement <program> <file>. Je ne vois pas le problème.
Marco

Il demande à une commande de faire: open index.html -a "Sublime Text" -c'est pourquoi je dis "problème", car si vous utilisez xdg-openpour ouvrir un fichier html, il y a de meilleures chances que le fichier soit ouvert par navigateur et non par un éditeur de texte comme "Sublime Text"
X3MBoy

3

Bien que les gens nomment souvent xdg-opencomme émulant la fonctionnalité de open, macOS openest un peu différent car il 1. ne redirige rien de stdout / stedrr et 2. détache tout ce que vous voulez exécuter depuis le terminal (ce qui est presque toujours ce que vous voulez lors du lancement de l'interface graphique) des applications pour ne pas avoir de terminaux)

Pour résoudre ce problème, j'ai trouvé un équivalent approprié en utilisant certains outils GNU standard (la syntaxe est fish shell, mais la conversion en bash est triviale):

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

Ajouté :

Pour ceux qui utilisent le shell bash, voici la fonction:

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

2

Ma solution (utilisée quotidiennement) est d'utiliser un aliasfor xdg-open.

Mettez juste ceci sur votre ~/.bashrc:

alias open='xdg-open '

Fermez puis redémarrez votre shell ou source ~/.bashrc.

Vous pouvez maintenant ouvrir n'importe quel fichier avec cette commande ... de .png à .jpg à .docx à .pdf à .txt.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.