2 votes

Lancer une commande dans gnome-terminal, puis fermer gnome-terminal sans terminer la commande exécutée ?

J'ai un projet un peu bizarre que je suis en train de bricoler. Je cherche un moyen de faciliter le lancement de MPV (lecteur vidéo) vers des liens vidéo. Le comportement par défaut de MPV est de lancer soit mpv https://url.of.video dans le terminal, ou glisser/déposer l'URL dans la fenêtre MPV. En tant que personne centrée sur le clavier, je ne trouve pas cela kasher. J'aimerais plutôt lancer une fenêtre contextuelle, coller l'URL, appuyer sur Entrée, et faire en sorte que MPV lance la vidéo à cette URL. De cette façon, je pourrais lier cette commande à un raccourci clavier, ce qui rendrait le processus complet très facile. J'ai terminé, mais avec une petite entaille : la fenêtre gnome-terminal reste en place. C'est un simple "one liner" :

URL=$(yad --entry) && gnome-terminal -- bash -c "mpv $URL"

Si je lance cette commande, j'obtiens une fenêtre contextuelle grâce à YAD. À ce stade, je colle l'URL, j'appuie sur Entrée et, en 1 à 2 secondes, une fenêtre MPV s'ouvre sur cette vidéo. C'est génial. Exactement ce que je voulais.

La coupure de papier que j'ai mentionnée est due au fait que gnome-terminal reste en marche. Ce n'est pas un problème majeur, mais j'aimerais savoir s'il existe un moyen pour la commande ci-dessus de lancer gnome-terminal, de faire appel à MPV, d'ajouter la variable (URL), puis de faire en sorte que gnome-terminal se ferme sans mettre fin au flux vidéo.

Je suis curieux de savoir si quelqu'un a une idée. Merci beaucoup !

11voto

dessert Points 36815

Solution à votre problème

La bonne solution consiste à ne pas appeler gnome-terminal et bash et même la définition d'une variable inutile en premier lieu, tout cela n'est pas nécessaire dans votre cas :

mpv -- "$(yad --entry)"

J'ai ajouté des guillemets pour traiter correctement l'URL, ce qui permet de s'assurer qu'elle peut contenir par exemple des espaces blancs et des signes d'esperluette ( & ) et la commande fonctionne toujours. -- raconte mpv d'arrêter de chercher des options et de traiter ce que vous choisissez de lui donner comme un argument à la place. Imaginez le cas courant où vous avez un fichier nommé --version dans le répertoire à partir duquel vous démarrez mpv et que vous entrez simplement ce nom de fichier, comment pouvez-vous faire ? mpv sait s'il doit vous montrer sa chaîne de version ou ouvrir le fichier ?

Réponse à votre question

nohup o disown peut être utilisé pour détacher un processus du Shell qui l'a démarré, voir Différences entre "<commande> & disown" et "nohup <commande> & disown" .

Dans votre cas, la solution correcte serait la suivante :

gnome-terminal -e nohup mpv -- "$(yad --entry)"

Cependant, pour une solution bien meilleure, voir ci-dessus.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X