3.4 KiB
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 :
---
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 :
---
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.jsonsont 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 :
{
"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