Questions générales sur Manjaro Linux.
S'il vous plaît, avant de poster, essayez la fonction de recherche du forum.
Répondre

Ouvrir un soft avec le terminal

#1Messageil y a 1 an

Pour ouvrir un soft via le terminal :

$ nomDuSoft
Le soft s'ouvre et le terminal reste ouvert.

La même chose en fermant le terminal :

$ nomDuSoft & exit
Le terminal se ferme et le soft s'ouvre.

Question : pourquoi le terminal se ferme avant l'ouverture du soft ?

Ouvrir un soft avec le terminal

#2Messageil y a 1 an

usage de & permet de rediriger les erreurs et donc d'avoir l'information dans le terminal
sans cette usage le terminal se ferme pour l'erreur rencontré ( pas sur que tu est dans d'autres logs l'information)

donc pas d'exit mais quitter proprement application merci

Ouvrir un soft avec le terminal

#3Messageil y a 1 an

Bonjour.
Normalement, c'est nomDuSoft &. Dans ce cas, le prompt est prêt pour une nouvelle instruction et le soft s'ouvre en parallèle. Si tu rajoutes <exit>, la commande est suivie d'un signal de fin et donc le terminal se ferme.

Ouvrir un soft avec le terminal

#4Messageil y a 1 an

bonjour

en fait, tu sembles confondre & et &&.

&& : lancer commande suivante si commande précédente finit bien
|| : lancer commande suivante si commande précédente finit mal
; : toujours lancer commande suivante

exemples (sans sudo!) :

ls && ls -l         # seconde commande ok
ls /root && ls -l   # pas de seconde commande
ls -l /root || echo "oops pas possible"  # puisque erreur, ok pour la seconde
ls /root ; ls -l    # les 2  commandes
----

commande &
Lance la commande en tâche de fond (donc le shell reprend tout de suite la main sans attendre le résultat)

Ouvrir un soft avec le terminal

#6Messageil y a 1 an

J'ai posé la question à l'AI, Whouah, ach'ment pédajgogue le gars !

:?:
Sous Linux en utilisant le terminal, quelle est la différence entre & et &&, par exemple entre $ nomDuSoft & exit et $ nomDuSoft && exit ?

:!:
En Linux, dans un terminal, le comportement de `&` et `&&` est très différent. Voici une explication de chacun et de leurs différences dans les exemples que tu as donnés :

### 1. `&` (Opérateur de mise en arrière-plan)

- **`&`** est utilisé pour exécuter une commande en arrière-plan, ce qui permet de continuer à utiliser le terminal pendant que la commande s'exécute.
- Cela signifie que la commande est lancée, mais le terminal est immédiatement disponible pour accepter d'autres commandes.

#### Exemple : `$ nomDuSoft & exit`

- **`nomDuSoft &`** : Cette commande lance `nomDuSoft` en arrière-plan. Le processus sera exécuté en parallèle, mais ne bloquera pas le terminal.
- **`exit`** : Cette commande sera exécutée immédiatement après le lancement de `nomDuSoft`. Cela signifie que le terminal va se fermer (ou se déconnecter si tu es en SSH) avant que `nomDuSoft` ait terminé son exécution, car il s'exécute en arrière-plan.

### 2. `&&` (Opérateur logique "ET")

- **`&&`** est utilisé pour exécuter une deuxième commande **seulement si** la première commande réussit (c'est-à-dire si elle se termine avec un code de retour 0, indiquant une exécution sans erreur).
- Si la première commande échoue (retourne un code d'erreur différent de 0), la deuxième commande ne sera pas exécutée.

#### Exemple : `$ nomDuSoft && exit`

- **`nomDuSoft`** : Cette commande est lancée normalement (en avant-plan). Le terminal attend que `nomDuSoft` termine son exécution.
- **`exit`** : Cette commande ne sera exécutée que si `nomDuSoft` se termine correctement (code de sortie 0).
- Si `nomDuSoft` échoue (par exemple, s'il renvoie un code d'erreur), la commande `exit` ne sera pas exécutée, et tu resteras dans le terminal.

### Résumé des différences

- **`&`** : Exécute la commande en arrière-plan. Le terminal reste disponible immédiatement pour d'autres commandes, et celles-ci seront exécutées sans attendre que la commande en arrière-plan se termine.
- **`&&`** : Exécute la deuxième commande **seulement si** la première s'exécute avec succès. Le terminal attend que la première commande se termine avant de continuer.

### Pour ton cas spécifique :
- **`$ nomDuSoft & exit`** : Lancement de `nomDuSoft` en arrière-plan, puis fermeture immédiate du terminal.
- **`$ nomDuSoft && exit`** : Lancement de `nomDuSoft`, et si cette commande réussit, fermeture du terminal. Sinon, le terminal restera ouvert.

J'espère que cela clarifie la différence !

:?:
$ nomDuSoft & exit : Lancement de nomDuSoft en arrière-plan, puis fermeture immédiate du terminal. Je suis d'accord, mais en ce qui concerne $ nomDuSoft && exit : Lancement de nomDuSoft, et si cette commande réussit, fermeture du terminal. Sinon, le terminal restera ouvert, pas du tout ; si j'ouvre un soft avec cette commande le soft s'ouvre et le terminal reste ouvert ??

:!:
Tu as raison de soulever cette question. Le comportement que tu observes est lié à la distinction entre les types de processus que tu lances (commandes interactives ou applications graphiques, par exemple) et la gestion des sessions de terminal.

### Cas de `$ nomDuSoft && exit`

Quand tu lances une commande comme **`nomDuSoft`**, qui pourrait être un logiciel graphique (par exemple, une application comme un éditeur de texte ou un navigateur), voici ce qui se passe :

1. **Lancement du logiciel** : Lorsque tu utilises `$ nomDuSoft && exit`, le terminal attend que **`nomDuSoft`** se termine avant d'exécuter la commande suivante, en l'occurrence **`exit`**. Cela signifie que si tu lances une application graphique qui reste ouverte (comme `gedit`, `firefox`, etc.), le terminal reste "bloqué" en attente que l'application se termine. Pendant ce temps, le terminal ne se ferme pas, car il attend la fin du processus.

2. **Fermeture du terminal** : Une fois que tu fermes l'application graphique, le terminal détecte que **`nomDuSoft`** s'est terminé avec succès (code de sortie `0`), et il exécute alors la commande **`exit`**, ce qui ferme la session du terminal.

### Pourquoi le terminal reste ouvert pendant l'exécution de l'application graphique ?

- **Application graphique (processus en avant-plan)** : Lorsque tu lances une application graphique, comme `gedit` ou `firefox`, celle-ci est souvent exécutée en avant-plan. Cela signifie que le terminal est lié à l'exécution de cette application, et il ne pourra pas exécuter d'autres commandes tant que l'application n'est pas fermée.

- **Terminal bloqué** : Le terminal attend la fin de l'application pour pouvoir exécuter la commande suivante (ici, `exit`). Donc, tant que l'application reste ouverte, le terminal reste actif.

### Comment résoudre cela ?

Si tu veux lancer une application graphique et fermer immédiatement le terminal sans avoir à attendre la fermeture de l'application, tu peux exécuter la commande avec `&` pour la mettre en arrière-plan. Par exemple :

- `$ nomDuSoft & exit`

Avec cette commande :
- **`nomDuSoft &`** : L'application est lancée en arrière-plan, donc le terminal n'attend pas qu'elle se termine.
- **`exit`** : Le terminal se ferme immédiatement après avoir lancé l'application.

### Résumé

- **`nomDuSoft && exit`** : Le terminal attend que l'application graphique se ferme avant de s'exécuter. Si l'application reste ouverte, le terminal reste ouvert.
- **`nomDuSoft & exit`** : L'application est lancée en arrière-plan, et le terminal se ferme immédiatement après.

Donc, dans ton cas, si tu veux que le terminal se ferme immédiatement après avoir lancé une application graphique, utilise `&` pour mettre l'application en arrière-plan.

:?:
Ok, mais nomDuSoft & exit n'est pas un peu brutal ? Est ce que (nomDuSoft &) && exit serait plus judicieux ou je chipote ?

:!:
Non, tu ne chipotes pas du tout, et c'est une question tout à fait légitime !

### Analyse de `$ nomDuSoft & exit`

Quand tu utilises `$ nomDuSoft & exit`, il y a deux choses qui se passent :
1. **`nomDuSoft &`** : Le processus est lancé en arrière-plan.
2. **`exit`** : Le terminal se ferme immédiatement après avoir lancé le processus en arrière-plan.

Cela peut être perçu comme "brutal" parce que le terminal se ferme sans attendre de s'assurer que le processus a bien été lancé correctement, ni de vérifier que tout fonctionne comme prévu. Par exemple, si le logiciel échoue au démarrage (disons qu'il y a une erreur de dépendance ou un autre problème), tu n'auras jamais de retour d'information, car le terminal se ferme instantanément.

### Analyse de `(nomDuSoft &) && exit`

Voyons maintenant ce qui se passe avec la commande :
`(nomDuSoft &) && exit`

1. **`(nomDuSoft &)`** : Le logiciel est lancé en arrière-plan grâce aux parenthèses. Cela signifie que le processus est lancé et détaché du terminal, mais la commande elle-même retourne immédiatement un code de sortie `0` (succès).

2. **`&& exit`** : **`exit`** ne sera exécuté que si la commande précédente (ici, le lancement de l'application en arrière-plan) s'est terminée avec succès, c'est-à-dire si le processus a été lancé correctement.

### Est-ce plus judicieux ?

Oui, c'est plus judicieux d'utiliser `(nomDuSoft &) && exit`, et voici pourquoi :

1. **Contrôle du succès du lancement** : Si le lancement de l'application échoue, par exemple à cause d'une erreur de syntaxe ou d'un fichier manquant, le terminal ne se fermera pas immédiatement. Il te donnera l'opportunité de voir ce qui ne va pas et de corriger le problème.

2. **Comportement plus propre** : En encapsulant l'application dans une commande en arrière-plan comme `(nomDuSoft &)`, tu t'assures que la commande est bien traitée dans un seul bloc, et tu peux ensuite vérifier son succès avant de fermer le terminal.

### Conclusion

- **`nomDuSoft & exit`** est plus "brutal" car il se ferme immédiatement, sans vérifier le succès du lancement.
- **`(nomDuSoft &) && exit`** est plus propre, car il attend que le processus soit correctement lancé en arrière-plan avant de fermer le terminal. Si le lancement échoue, tu pourras voir l'erreur.

Donc, si tu veux un comportement plus solide et propre, **`(nomDuSoft &) && exit`** est effectivement plus judicieux !
Répondre