human
Dites que j'ai un fichier ```/templates/apple``` et que je veux

* le mettre à deux endroits différents puis
* supprimer l'original.

Donc, ```/templates/apple``` sera copié dans ```/templates/used``` ET ```/templates/inuse```
et ensuite, j'aimerais supprimer l'original.
Est-ce que ```cp``` est la meilleure façon de faire cela, suivi de ```rm``` ? Ou y a-t-il une meilleure façon ?
Je veux tout faire en une seule ligne, donc je pense que cela ressemblerait à quelque chose comme ça:
```cp /templates/apple /templates/used | cp /templates/apple /templates/inuse | rm /templates/apple
```
Est-ce que c'est la syntaxe correcte
gpt
Vous utilisez ```|``` (pipe) pour rediriger la sortie d'une commande vers une autre commande. Ce que vous recherchez est l'opérateur ```&&``` pour exécuter la commande suivante uniquement si la précédente a réussi:
```cp /templates/apple /templates/used && cp /templates/apple /templates/inuse && rm /templates/apple
```
Ou 
```cp /templates/apple /templates/used && mv /templates/apple /templates/inuse
```

Pour résumer (de manière non exhaustive) les opérateurs/séparateurs de commandes de bash:

* ```|``` redirige la sortie standard (```stdout```) d'une commande vers l'entrée standard d'une autre commande. Notez que ```stderr``` va toujours dans sa destination par défaut, quelle qu'elle soit.
* ```|&``` redirige à la fois la sortie standard (```stdout```) et la sortie d'erreur (```stderr```) d'une commande vers l'entrée standard d'une autre commande. Très utile, disponible dans bash version 4 et supérieure.
* ```&&``` exécute la commande de droite de ```&&``` uniquement si la précédente a réussi.
* ```||``` exécute la commande de droite de ```||``` uniquement si la précédente a échoué.
* ```;``` exécute la commande de droite de ```;``` toujours, que la commande précédente ait réussi ou échoué. Sauf si ```set -e``` a été précédemment invoqué, ce qui fait échouer ```bash``` en cas d'erreur.