L'outil bash permet à Claude d'exécuter des commandes shell dans une session bash persistante, permettant les opérations système, l'exécution de scripts et l'automatisation en ligne de commande.
L'outil bash fournit à Claude :
| Modèle | Version de l'outil |
|---|---|
| Modèles Claude 4 et Sonnet 3.7 (obsolète) | bash_20250124 |
Les versions plus anciennes de l'outil ne sont pas garanties d'être rétro-compatibles avec les modèles plus récents. Utilisez toujours la version de l'outil qui correspond à votre version de modèle.
L'outil bash maintient une session persistante :
| Paramètre | Requis | Description |
|---|---|---|
command | Oui* | La commande bash à exécuter |
restart | Non | Définir à true pour redémarrer la session bash |
*Requis sauf si vous utilisez restart
Claude peut chaîner des commandes pour accomplir des tâches complexes :
# Demande de l'utilisateur
"Install the requests library and create a simple Python script that fetches a joke from an API, then run it."
# L'outil de Claude utilise :
# 1. Installer le package
{"command": "pip install requests"}
# 2. Créer le script
{"command": "cat > fetch_joke.py << 'EOF'\nimport requests\nresponse = requests.get('https://official-joke-api.appspot.com/random_joke')\njoke = response.json()\nprint(f\"Setup: {joke['setup']}\")\nprint(f\"Punchline: {joke['punchline']}\")\nEOF"}
# 3. Exécuter le script
{"command": "python fetch_joke.py"}La session maintient l'état entre les commandes, donc les fichiers créés à l'étape 2 sont disponibles à l'étape 3.
L'outil bash est implémenté comme un outil sans schéma. Lors de l'utilisation de cet outil, vous n'avez pas besoin de fournir un schéma d'entrée comme avec d'autres outils ; le schéma est intégré au modèle de Claude et ne peut pas être modifié.
Lors de l'implémentation de l'outil bash, gérez divers scénarios d'erreur :
L'outil bash fournit un accès direct au système. Implémentez ces mesures de sécurité essentielles :
ulimit pour définir les contraintes de ressourcessudo, rm -rf, etc.)The bash tool adds 245 input tokens to your API calls.
Additional tokens are consumed by:
Voir tarification de l'utilisation des outils pour les détails complets de la tarification.
pytest && coverage reportnpm install && npm run buildgit status && git add . && git commit -m "message"wc -l *.csv && ls -lh *.csvfind . -name "*.py" | xargs grep "pattern"tar -czf backup.tar.gz ./datadf -h && free -mps aux | grep pythonexport PATH=$PATH:/new/path && echo $PATHvim, less ou les invites de mot de passeL'outil bash est plus puissant lorsqu'il est combiné avec l'éditeur de texte et d'autres outils.
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
tools=[
{
"type": "bash_20250124",
"name": "bash"
}
],
messages=[
{"role": "user", "content": "List all Python files in the current directory."}
]
)Configurer un environnement bash
Créez une session bash persistante avec laquelle Claude peut interagir :
import subprocess
import threading
import queue
class BashSession:
def __init__(self):
self.process = subprocess.Popen(
['/bin/bash'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
bufsize=0
)
self.output_queue = queue.Queue()
self.error_queue = queue.Queue()
self._start_readers()Gérer l'exécution des commandes
Créez une fonction pour exécuter les commandes et capturer la sortie :
def execute_command(self, command):
# Envoyer la commande à bash
self.process.stdin.write(command + '\n')
self.process.stdin.flush()
# Capturer la sortie avec délai d'attente
output = self._read_output(timeout=10)
return outputTraiter les appels d'outils de Claude
Extrayez et exécutez les commandes des réponses de Claude :
for content in response.content:
if content.type == "tool_use" and content.name == "bash":
if content.input.get("restart"):
bash_session.restart()
result = "Bash session restarted"
else:
command = content.input.get("command")
result = bash_session.execute_command(command)
# Retourner le résultat à Claude
tool_result = {
"type": "tool_result",
"tool_use_id": content.id,
"content": result
}Implémenter les mesures de sécurité
Ajoutez la validation et les restrictions :
def validate_command(command):
# Bloquer les commandes dangereuses
dangerous_patterns = ['rm -rf /', 'format', ':(){:|:&};:']
for pattern in dangerous_patterns:
if pattern in command:
return False, f"Command contains dangerous pattern: {pattern}"
# Ajouter plus de validation selon les besoins
return True, NoneAfficher et modifier des fichiers texte avec Claude