158 lines
3.4 KiB
Markdown
158 lines
3.4 KiB
Markdown
# Commande Shell `!` dans MagicCode
|
|
|
|
## Vue d'ensemble
|
|
|
|
MagicCode permet d'exécuter des commandes shell directement dans vos prompts ou commandes personnalisées en utilisant la syntaxe `!`.
|
|
|
|
## Syntaxe
|
|
|
|
### Commande simple
|
|
```
|
|
!commande
|
|
```
|
|
Exécute `commande` et remplace `!commande` par sa sortie.
|
|
|
|
**Exemple :**
|
|
```
|
|
Voici mon utilisateur : !whoami
|
|
```
|
|
Devient (après expansion) :
|
|
```
|
|
Voici mon utilisateur : arnaud
|
|
```
|
|
|
|
### Commande avec espaces (backticks)
|
|
```
|
|
!`commande avec arguments`
|
|
```
|
|
Pour les commandes contenant des espaces ou des arguments, utilisez des backticks.
|
|
|
|
**Exemple :**
|
|
```
|
|
Liste des fichiers TypeScript : !`ls -la *.ts`
|
|
```
|
|
|
|
## Utilisation
|
|
|
|
### 1. Dans les prompts directs
|
|
|
|
Tapez directement dans l'interface MagicCode :
|
|
```
|
|
Analyse le contenu du dossier actuel : !`ls -la`
|
|
```
|
|
|
|
MagicCode exécute la commande, affiche le résultat, puis envoie le prompt expansé au LLM.
|
|
|
|
### 2. Dans les commandes personnalisées (`.claude/commands/`)
|
|
|
|
Créez un fichier `.claude/commands/status.md` :
|
|
```markdown
|
|
---
|
|
description: Affiche le statut du projet
|
|
---
|
|
|
|
État actuel du dépôt Git :
|
|
|
|
!`git status --short`
|
|
|
|
Derniers commits :
|
|
|
|
!`git log --oneline -5`
|
|
```
|
|
|
|
Puis utilisez `/status` dans MagicCode. Les commandes shell seront exécutées et leurs résultats inclus dans le prompt envoyé au LLM.
|
|
|
|
### 3. Combinaison avec des arguments
|
|
|
|
Dans `.claude/commands/branch-info.md` :
|
|
```markdown
|
|
---
|
|
description: Info sur une branche Git
|
|
argument-hint: <nom-branche>
|
|
---
|
|
|
|
Informations sur la branche $1 :
|
|
|
|
!`git log $1 --oneline -10`
|
|
```
|
|
|
|
Utilisez `/branch-info main` pour obtenir les informations sur la branche `main`.
|
|
|
|
## Gestion des erreurs
|
|
|
|
Si une commande échoue, elle est remplacée par `[ERREUR: message d'erreur]` dans le prompt, et MagicCode affiche un avertissement.
|
|
|
|
**Exemple :**
|
|
```
|
|
!`commande_inexistante`
|
|
```
|
|
Devient :
|
|
```
|
|
[ERREUR: Échec de la commande shell: ...]
|
|
```
|
|
|
|
## Permissions et sécurité
|
|
|
|
- Les commandes shell respectent les permissions définies dans `.claude/settings.json`
|
|
- Les variables d'environnement de `settings.json` sont transmises
|
|
- Le dossier de travail est celui du lancement de MagicCode
|
|
- Timeout de 30 secondes par commande
|
|
- Buffer de sortie limité à 10 MB
|
|
|
|
## Variables d'environnement
|
|
|
|
Les commandes shell ont accès aux variables définies dans `.claude/settings.json` :
|
|
|
|
```json
|
|
{
|
|
"env": {
|
|
"PROJECT_NAME": "mon-projet",
|
|
"API_KEY": "..."
|
|
}
|
|
}
|
|
```
|
|
|
|
Puis utilisez :
|
|
```
|
|
!`echo "Projet: $PROJECT_NAME"`
|
|
```
|
|
|
|
## Exemples pratiques
|
|
|
|
### Analyse de performance
|
|
```
|
|
Analyse les fichiers les plus volumineux :
|
|
!`du -sh * | sort -hr | head -10`
|
|
```
|
|
|
|
### État des dépendances
|
|
```
|
|
Vérifie les dépendances obsolètes :
|
|
!`npm outdated`
|
|
```
|
|
|
|
### Tests
|
|
```
|
|
Lance les tests et analyse les résultats :
|
|
!`npm test 2>&1`
|
|
```
|
|
|
|
### Information système
|
|
```
|
|
CPU et mémoire :
|
|
!`top -bn1 | grep "Cpu(s)" | head -1`
|
|
```
|
|
|
|
## Limitations
|
|
|
|
- Les commandes sont exécutées dans un shell système, pas dans un environnement isolé
|
|
- Pas de support pour les commandes interactives
|
|
- Les redirections (`>`, `>>`) et substitutions (`` `...` ``, `$(...)`) sont autorisées mais à vos risques
|
|
- Les commandes composées (`&&`, `;`, `|`) sont supportées
|
|
|
|
## Notes techniques
|
|
|
|
- Implémentation : `packages/ext-claudecode/src/shell-commands.ts`
|
|
- Regex de détection : `/!((?:`[^`]+`)|(?:[^\s]+))/g`
|
|
- Exécution via `child_process.exec`
|
|
- Les commandes multiples sont exécutées en parallèle pour plus de performance
|