# 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: --- 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