web-dev-qa-db-fra.com

Comment ouvrir un fichier depuis un script bash?

Ok, donc exécuter gedit myfile.txt fonctionne bien. Mais qu'en est-il de l'ouverture d'un fichier depuis un script bash, en utilisant l'application de bureau par défaut liée au type de fichier?

J'ai essayé ci-dessous, qui fonctionne très bien lorsqu'il est exécuté manuellement dans un terminal, mais quand je le mets dans un fichier bash, rien ne se passe:

#!/bin/bash
xdg-open "myfile.txt"&

Que devrais-je faire à la place?

Veuillez noter que le fichier doit rester ouvert après la fermeture du terminal.

22
Industrial

Je pense que votre script devrait fonctionner. Mais vous pouvez ajouter quelque chose pour obtenir un peu plus d'informations:

#!/bin/bash
T=`xdg-mime query filetype $1`
echo "opening file "  $1  " of type " $T "with " `xdg-mime query default $T`
xdg-open $1
echo "finished script"

lors de l'exécution de ce script (nommé my_open.sh) dans un terminal comme celui-ci:

my_open.sh path/to/somefile.txt

Je reçois la sortie suivante:

opening file  path/to/somefile.txt  of type  text/plain with  gedit.desktop
finished script

ce qui m'indique que le chemin d'accès au fichier est correct, que le type MIME est reconnu et que le fichier desktop utilisé pour ouvrir le fichier est également correct. Et gedit s'ouvre avec le fichier en question.

Maintenant, lorsqu'il est exécuté sur un autre fichier:

my_open.sh path/to/README

Je reçois la sortie suivante:

opening file  path/to/README  of type  text/x-readme with
finished script

Notez le type de MIME différent et le fichier de bureau manquant. Néanmoins, xdg-open ouvre la valeur par défaut pour tous les fichiers texte (gedit).

Donc, vous voudrez peut-être ajouter quelque chose comme ceci à votre script et voir si vous obtenez une sortie inattendue (que vous pourrez ensuite ajouter à votre question ...).

16
xubuntix

Faites un script bash test.sh comme:

#!/bin/bash
gedit myfile.txt

Ensuite, rendez le script exécutable comme suit:

chmod +x test.sh

Enfin, exécutez le script en tant que:

./test.sh
5
Usman

Peut-être que gnome-open au lieu de xdg-open

3
Denis

Vous allez dans la bonne direction. Si vous souhaitez que l'application graphique reste ouverte lorsque vous fermez la fenêtre du terminal, il vous suffit d'ajouter un Nohupau début de la ligne.

#!/bin/bash
Nohup xdg-open "myfile.txt"&

Si l'application graphique ne s'ouvre pas, c'est probablement parce que vous n'avez pas défini la variable d'environnement DISPLAYdans le shell à partir duquel vous essayez de la lancer. Essayez de faire un echo $DISPLAY

2
Mark

La première partie de votre question

avec la commande catvous pouvez ouvrir un fichier à l'intérieur du terminal, si c'est ce que vous voulez (c'est indiqué dans la première partie de votre question).

pour l'utiliser, vous pouvez simplement taper cat FILENAME.

Les autres informations

Si vous avez besoin de plus de commandes: Voici une bonne liste de commandes.

Editeur par défaut GNOME

Si vous souhaitez ouvrir le fichier dans l'application par défaut de GNOME geditname__.

pour l'utiliser, tapez simplement gedit FILENAME

0
Alvar

Bien que je ne sache pas vraiment ce qui doit être accompli ici et sur la base de quelques commentaires récents n seul script doit ouvrir n’importe quel fichier dans l’application par défaut ou dans la mesure où cette application prend en charge cette fonctionnalité.

Si c'est le cas alors le moyen le plus simple de le faire serait d'ouvrir un terminal et d'aller scriptname/chemin/à/nom_fichier ou s'il y a des espaces dans chemin, nom_script '/ chemin/à/nom_fichier'

cd; mkdir -p bin && gedit ~/bin/openit1

Utilisez ceci comme script, vous pouvez utiliser n'importe quel nom pour le script, je vais utiliser openit1 comme exemple. Il est préférable d'utiliser des scripts directement depuis ~/bin pour ajouter un numéro à nommer afin d'éviter tout conflit avec les commandes linux existantes.

#!/bin/bash
xdg-open "$1"

Fermez gedit & dans le terminal

chmod u+x ~/bin/openit1

Redémarrez pour ajouter ~/bin à votre $ PATH

Pour appeler un terminal et aller

openit1 /path/to/filename or openit1 'path/to/filename' 

SI comme indiqué par l'origine & en utilisant l'origine. script pour n fichier particulier par script & invocation par d. En cliquant sur le script, il vous suffit de choisir "Run" au lieu de "Run in Terminal"

0
doug