#1 Le 17/10/2022, à 16:25
- cmontesquat
Script d'ouverture de fichier
Bonjour
Je viens de passer sous Ubuntu 22.04.1 LTS, et mon script de lancement des fichiers de travail ne fonctionne plus intégralement.
Avant, il fonctionnait en utilisant au clic droit sur le nom du script, l'option "Lancer" et non pas "Lancer dans un Terminal"
Maintenant il n'y a plus que l'option "Exécuter comme un programme".
Donc voici ce qui se passe quand on clique sur cette option "Exécuter comme un programme" :
1 toutes les lignes de ce style fonctionnent --> xdg-open /home/admcyrill/PersoTravail/PTempUSB.odt
Les fichiers s'ouvrent normalement et il ne reste aucune fenêtre Terminal résiduelle
2 en revanche celles-ci ne fonctionne pas (aucun ficher ne s'ouvre) --> xdg-open /home/admcyrill/PersoTravail/S16DUnAutreALAutreAnnoté.pdf
Pour ce dernier point :
si je fait un copier coller de la ligne dans une fenêtre terminal, la ligne s'exécute correctement et la fenêtre Terminal rend la main et on peut la fermer, mais il faut le faire manuellement, sans fermer le Visionneur de PDF.
si j'exécute cette commande dans un script en faisant "Exécuter comme un programme", on voit une fenêtre Terminal s'ouvrir et se fermer instantanément. Aucun ficher n'est ouvert.
si je substitue evince à xdg-open, le fichier s'ouvre, mais la fenêtre Terminal ne rend pas la main, ce qui fait que les autres fichiers ne s'ouvrent pas ; si je ferme cette fenêtre Terminal manuellement, cela ferme Evince et le fichier ouvert.
Quid ? Comment réobtenir un fonctionnement comme lors de la version précédente ?
Merci.
Hors ligne
#2 Le 17/10/2022, à 18:14
- Tawal
Re : Script d'ouverture de fichier
Hello,
C'est difficile à dire comme ça.
Le mieux serait de poster le contenu du script.
Le script lancé depuis un terminal fonctionne bien ?
Ajoute cette ligne au début du script (juste après le shebang) :
exec 1> >(tee -a $HOME/log_script) 2>&1
Cela va te créer un log "log_script" dans ton home.
Log que tu pourras consulter après avoir essayé de lancer ton script graphiquement.
En gros, en attente d'informations ...
Edit:
Correction d'une erreur dans la commande et de fautes d'orthographes ailleurs
Dernière modification par Tawal (Le 17/10/2022, à 18:18)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#3 Le 17/10/2022, à 22:22
- kamaris
Re : Script d'ouverture de fichier
Peut-être l'association application <-> type-mime a-t-elle été cassée lors de la mise à jour.
Que renvoie
xdg-mime query default application/pdf
? Pour remettre evince en application par défaut pour les fichiers pdf, cette commande devrait faire l'affaire :
xdg-mime default org.gnome.Evince.desktop application/pdf
Hors ligne
#4 Le 18/10/2022, à 16:59
- cmontesquat
Re : Script d'ouverture de fichier
Merci. Voici les réponses.
1 Le script (qui est plein de commentaires car c'est la partie qui ne fonctionne pas, voir les dernières lignes)
#!/bin/bash exec 1> >(tee -a $HOME/log_script) 2>&1 # Remarque : les fichiers qui comportent un espace doivent avoir un "\" avant leur espace lorsqu'il sont appelé en script #Si le premier ficher writer n'est pas lancer avec xdg-open, le programme s'arrête à cette ligne et n'ouvre pas les fichiers suivants (il faut pour cela fermer ce premier fichier) #xdg-open /home/admcyrill/PersoTravail/PTempUSB.odt #xdg-open /home/admcyrill/PersoTravail/S16DeAutreAautre.odt #xdg-open /home/admcyrill/PersoTravail/Arabe\ MethodeMedine\ T1GrammaireCM.odt #xdg-open /home/admcyrill/PersoTravail/Arabe\ MethodeMedine\ T1Repertoire.ods #xdg-open /home/admcyrill/PersoTravail/Grec.ods #libreoffice --writer /home/admcyrill/PersoTravail/S16DeAutreAautre.odt #libreoffice --writer /home/admcyrill/PersoTravail/Arabe\ MethodeMedine\ T1GrammaireCM.odt #libreoffice --calc /home/admcyrill/PersoTravail/Arabe\ MethodeMedine\ T1Repertoire.ods #libreoffice --calc /home/admcyrill/PersoTravail/Nage.ods #sleep 5 #/usr/bin/nautilus #sleep 5 #On ne peut lancer plusieurs occurrences de Evince, il vaut donc passer par xdg-open qui associe au type de fichier en cause, le logiciel par défaut #evince /home/admcyrill/PersoTravail/Arabe\ MethodeMedine\ T2\ Corrigé.pdf #evince /home/admcyrill/PersoTravail/S16DUnAutreALAutreAnnoté.pdf #La comamnce ne mémorise la page à lauquelle il faut ouvrir le fichier que pour le premier fichier et ne ferme pas la console Terminal d'appel #evince /home/admcyrill/PersoTravail/Arabe\ MethodeMedine\ T2\ Corrigé.pdf /home/admcyrill/PersoTravail/S16DUnAutreALAutreAnnoté.pdf xdg-open /home/admcyrill/PersoTravail/Arabe\ MethodeMedine\ T2\ Corrigé.pdf xdg-open /home/admcyrill/PersoTravail/S16DUnAutreALAutreAnnoté.pdf #sleep 5 #/usr/bin/firefox exit 0
2 La trace log_script
Le fichier une seule ligne avec le n° 1 mais vide (impossible de faire un copier coller car la ligne est vide)
3 L'association ficher PDF / Evince.
:~$ xdg-mime query default application/pdf org.gnome.Evince.desktop
Mais on le savait puisque j'avais précisé que la ligne du script copier dans le Terminal au prompt s'exécute correctement
Cordialement.
Hors ligne
#5 Le 18/10/2022, à 18:11
- Tawal
Re : Script d'ouverture de fichier
Essaie de mettre un & en fin de ligne de commande ouvrant un fichier.
Cela met le processus en arrière plan et permet au reste du script de se dérouler.
Je te proposerais donc un truc du genre :
#!/bin/bash
exec 1> >(tee -a $HOME/log_script) 2>&1
xdg-open /home/admcyrill/PersoTravail/PTempUSB.odt &
xdg-open /home/admcyrill/PersoTravail/S16DeAutreAautre.odt &
xdg-open "/home/admcyrill/PersoTravail/Arabe MethodeMedine T1GrammaireCM.odt" &
xdg-open "/home/admcyrill/PersoTravail/Arabe MethodeMedine T1Repertoire.ods" &
xdg-open /home/admcyrill/PersoTravail/Grec.ods &
sleep 5
/usr/bin/nautilus
sleep 5
evince "/home/admcyrill/PersoTravail/Arabe MethodeMedine T2 Corrigé.pdf" &
evince /home/admcyrill/PersoTravail/S16DUnAutreALAutreAnnoté.pdf &
sleep 5
/usr/bin/firefox
exit 0
Dis quel fichiers n'ont pas été ouverts.
Et donne le retour de :
cat ~/log_script
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#6 Le 18/10/2022, à 19:19
- cmontesquat
Re : Script d'ouverture de fichier
Merci.
Je n'ai fait les essais (j'avais effectivement testé aussi cela) qu'avec les PDF car c'est là où j'ai le problème.
1 Essai 1
evince "/home/admcyrill/PersoTravail/Arabe\ MethodeMedine\ T2\ Corrigé.pdf" & evince /home/admcyrill/PersoTravail/S16DUnAutreALAutreAnnoté.pdf &
$ cat log_script cat: log_script: Aucun fichier ou dossier de ce type
2 Essai 2
evince /home/admcyrill/PersoTravail/Arabe\ MethodeMedine\ T2\ Corrigé.pdf & evince /home/admcyrill/PersoTravail/S16DUnAutreALAutreAnnoté.pdf &
$ cat log_script cat: log_script: Aucun fichier ou dossier de ce type
Sans les & en fin de ligne, le premier fichier PDF se lance, la fenêtre Terminal reste ouverte ; si je ferme le fichier PDF ouvert, le deuxième fichier PDF s'ouvre alors, la fenêtre Terminal est toujours ouverte et se ferme quand je ferme ce deuxième fichier PDF ouvert.
Si de remplace evince par xdg-open et que je rajoute & en fin de ligne, c'est pareil, cela ne fonctionne pas.
Salutation...
Hors ligne
#7 Le 18/10/2022, à 19:32
- Tawal
Re : Script d'ouverture de fichier
Essaie en mettant le chemin absolu de Evince :
/usr/bin/evince ton_fichier
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#8 Le 20/10/2022, à 12:56
- cmontesquat
Re : Script d'ouverture de fichier
Merci.
Cela lance les deux fichiers PDF MAIS ne ferme pas la fenêtre Terminal. Cela ne génère aucune trace du script.
Le rajout de & en fin de ligne de commande, fait que rien ne se passe.
J'avais aussi essayé d'utiliser ce paramètr(e sans succès : -o, --new-window Ouvrir une nouvelle fenêtre (information de evince --help).
Le problème se résume donc à comment faire pour fermer cette fenêtre terminal ?
Cordialement.
Hors ligne
#9 Le 20/10/2022, à 13:53
- Tawal
Re : Script d'ouverture de fichier
Pour que le terminal se ferme, il faut que les processus lancés dans ce terminal soient terminés ou en arrière plan.
Je trouve étrange que sans le & final, tout se passe bien et qu'avec rien ne se passe.
C'est pas normal.
Ouvre un terminal,
lance cette commande :
/usr/bin/evince un_fichier_de_ton_choix &
Puis, une fois que tu as la main, lance cette commande pour voir si evince est en train de tourner :
ps -elf | grep evince
poste le retour.
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#10 Le 20/10/2022, à 19:55
- cmontesquat
Re : Script d'ouverture de fichier
Bonjour
1. Essai 1
$ /usr/bin/evince /home/admcyrill/PersoTravail/Arabe\ MethodeMedine\ T2\ Corrigé.pdf & [1] 194411
Le programme rend la main.
ps -elf | grep evince 0 S admcyri+ 194663 140950 2 80 0 - 228250 do_pol 20:47 pts/3 00:00:05 /usr/bin/evince /home/admcyrill/PersoTravail/Arabe MethodeMedine T2 Corrigé.pdf 0 S admcyri+ 194669 1747 0 80 0 - 39196 do_pol 20:47 ? 00:00:00 /usr/libexec/evinced 0 S admcyri+ 194870 192918 0 80 0 - 2933 pipe_r 20:50 pts/4 00:00:00 grep --color=auto evince
2 Esai 2
$ /usr/bin/evince /home/admcyrill/PersoTravail/Arabe\ MethodeMedine\ T2\ Corrigé.pdf
Donc le programme ne rend pas la main.
~$ ps -elf | grep evince 0 S admcyri+ 194663 140950 11 80 0 - 228250 do_pol 20:47 pts/3 00:00:05 /usr/bin/evince /home/admcyrill/PersoTravail/Arabe MethodeMedine T2 Corrigé.pdf 0 S admcyri+ 194669 1747 0 80 0 - 39196 do_pol 20:47 ? 00:00:00 /usr/libexec/evinced 0 S admcyri+ 194730 192918 0 80 0 - 2933 pipe_r 20:48 pts/4 00:00:00 grep --color=auto evince
3 Essai3
J'ai donc refait un essai avec ces deux commandes dans le script :/usr/bin/evince /home/admcyrill/PersoTravail/Arabe\ MethodeMedine\ T2\ Corrigé.pdf & /usr/bin/evince /home/admcyrill/PersoTravail/S16DUnAutreALAutreAnnoté.pdf &
Rien ne se passe. Je n'y comprends rien.
$ cat log_script admcyrill@PCPerso:~$
Cordialement.
Hors ligne
#11 Le 20/10/2022, à 20:57
- Tawal
Re : Script d'ouverture de fichier
Dans le 1er essai, est-ce que Evince s'est ouvert avec le bon fichier ?
Car le processus, lui, est bien présent.
Dernière modification par Tawal (Le 20/10/2022, à 20:58)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#12 Le 21/10/2022, à 04:32
- cmontesquat
Re : Script d'ouverture de fichier
Merci
Oui, quand les fichiers s'ouvrent, ce sont toujours les bons.
Cordialement.
Hors ligne
#13 Le 29/04/2023, à 02:42
- Coeur Noir
Re : Script d'ouverture de fichier
Le problème est-il réglé ? Sinon je propose cette hypothèse…
Avant, il fonctionnait en utilisant au clic droit sur le nom du script, l'option "Lancer" et non pas "Lancer dans un Terminal"
Maintenant il n'y a plus que l'option "Exécuter comme un programme".
Avant, Nautilus ( l'explorateur de fichiers ) permettait d'exécuter des scripts et d'autres trucs depuis n'importe quel emplacement.
Maintenant il ne le permet plus - enfin si mais de façon plus restreinte : le seul type de fichiers qu'il veut bien « exécuter » ce sont des lanceurs ( des fichiers en .desktop )
et à condition qu'ils se trouvent dans ~/.local/share/applications ou ~/Bureau ou /usr/share/applications - ailleurs et autre chose, ça marchera pô, Nautilus est un explorateur, pas un « exécuteur ».
Ton script n'est probablement pas en cause.
Il faudrait créer pour lui un lanceur en bonne et due forme, lanceur qui … lancera ton script via sa ligne Exec=sh -c /chemin/absolu/vers_le/script.sh
exemple
Si tu places tes scripts.sh dans ~/.local/bin alors ça simplifiera le chemin dans leur lanceur, qui deviendra relatif avec Exec=sh -c nom_d'un_script.sh
et ça te permettra aussi de l'exécuter depuis un terminal en tapant simplement son nom.
Le dossier $HOME/.local/bin - quand il existe - est automatiquement ajouté à la variable d'environnement $PATH.
Les lanceurs .desktop placés dans ~/.local/share/applications ou /usr/share/applications sont automatiquement affichés dans la vue des applications ( d'où tu peux les mettre en favori dans le dock, par exemple. )
Chaque script .sh devra lui présenter le droit d'exécution ; les lanceurs en .desktop pas nécessairement ( sous Gnome et avec Nautilus, en tout cas. )
Dernière modification par Coeur Noir (Le 29/04/2023, à 02:59)
Débuter ⋅ Doc ⋅ Bien rédiger ⋅ Retour commande ⋅ Insérer image | illustrations & captures d'écran < ⋅ >
Hors ligne