web-dev-qa-db-fra.com

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

Je bricole avec un truc bizarre. 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 soit de lancer mpv https://url.of.video dans un terminal, soit de faire glisser/déposer l'URL vers la fenêtre MPV. Je ne trouve pas ce casher être une personne centrée sur le clavier. Au lieu de cela, j'aimerais créer une boîte contextuelle, coller l'URL, appuyer sur Entrée et faire en sorte que MPV lance la vidéo sur cette URL. De cette façon, je pouvais associer cette commande à un raccourci clavier, ce qui simplifiait grandement le processus. J'ai ceci complet, mais avec un petit coup de papier - la fenêtre gnome-terminal traîne. C'est un simple paquebot:

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

Si je lance cette commande, je reçois une boîte de dialogue grâce à YAD. À ce stade, je colle l'URL, puis appuyez sur Entrée. En 1-2 secondes, une fenêtre MPV s'ouvre pour cette vidéo. Impressionnant. Exactement ce que je voulais.

La coupe de papier que j'ai mentionnée est le fait que gnome-terminal reste actif. Ce n’est pas un problème massif, mais je voudrais savoir s’il existe un moyen pour cette commande de lancer gnome-terminal, d’appeler MPV, d’ajouter la variable (URL), puis de faire se fermer gnome-terminal sans mettre fin à la vidéo. courant.

Curieux si quelqu'un a des idées. Merci beaucoup!

2
JaSauders

Solution à votre problème

La bonne solution ici consiste à omettre d'appeler gnome-terminal et bash et même de définir 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 gérer correctement l'URL, ce qui garantit qu'il peut contenir par exemple. espaces et signes esperluette (&) et la commande fonctionne toujours. -- indique à mpv de cesser de rechercher des options et traite ce que vous choisissez comme argument. Dans le cas habituel où vous avez un fichier nommé --version dans le répertoire dans lequel vous démarrez mpv et entrez simplement ce nom de fichier, comment mpv peut-il savoir s'il doit vous montrer sa version ou ouvrir le fichier?

Répondre à votre question

Nohup ou 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:

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

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

11
dessert