Das Bash-Tool ermöglicht Claude, Shell-Befehle in einer persistenten Bash-Sitzung auszuführen, was Systemoperationen, Skriptausführung und Befehlszeilenautomatisierung ermöglicht.
Das Bash-Tool bietet Claude:
| Modell | Tool-Version |
|---|---|
| Claude 4-Modelle und Sonnet 3.7 (veraltet) | bash_20250124 |
Ältere Tool-Versionen sind nicht garantiert abwärtskompatibel mit neueren Modellen. Verwenden Sie immer die Tool-Version, die Ihrer Modellversion entspricht.
Das Bash-Tool verwaltet eine persistente Sitzung:
| Parameter | Erforderlich | Beschreibung |
|---|---|---|
command | Ja* | Der auszuführende Bash-Befehl |
restart | Nein | Auf true setzen, um die Bash-Sitzung neu zu starten |
*Erforderlich, es sei denn, Sie verwenden restart
Claude kann Befehle verketten, um komplexe Aufgaben zu erledigen:
# Benutzeranfrage
"Install the requests library and create a simple Python script that fetches a joke from an API, then run it."
# Claudes Tool verwendet:
# 1. Paket installieren
{"command": "pip install requests"}
# 2. Skript erstellen
{"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. Skript ausführen
{"command": "python fetch_joke.py"}Die Sitzung behält den Status zwischen Befehlen bei, sodass in Schritt 2 erstellte Dateien in Schritt 3 verfügbar sind.
Das Bash-Tool wird als schemalooses Tool implementiert. Bei der Verwendung dieses Tools müssen Sie kein Eingabeschema wie bei anderen Tools bereitstellen. Das Schema ist in Claudes Modell integriert und kann nicht geändert werden.
Bei der Implementierung des Bash-Tools müssen Sie verschiedene Fehlerszenarien behandeln:
Das Bash-Tool bietet direkten Systemzugriff. Implementieren Sie diese wesentlichen Sicherheitsmaßnahmen:
ulimit, um Ressourcenbeschränkungen festzulegensudo, rm -rf, usw.)The bash tool adds 245 input tokens to your API calls.
Additional tokens are consumed by:
Siehe Tool-Use-Preisgestaltung für vollständige Preisdetails.
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 oder Passwortaufforderungen nicht verarbeitenDas Bash-Tool ist am leistungsfähigsten, wenn es mit dem Text-Editor und anderen Tools kombiniert wird.
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."}
]
)Richten Sie eine Bash-Umgebung ein
Erstellen Sie eine persistente Bash-Sitzung, mit der Claude interagieren kann:
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()Behandeln Sie die Befehlsausführung
Erstellen Sie eine Funktion zum Ausführen von Befehlen und zum Erfassen der Ausgabe:
def execute_command(self, command):
# Befehl an Bash senden
self.process.stdin.write(command + '\n')
self.process.stdin.flush()
# Ausgabe mit Timeout erfassen
output = self._read_output(timeout=10)
return outputVerarbeiten Sie Claudes Tool-Aufrufe
Extrahieren und führen Sie Befehle aus Claudes Antworten aus:
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)
# Ergebnis an Claude zurückgeben
tool_result = {
"type": "tool_result",
"tool_use_id": content.id,
"content": result
}Implementieren Sie Sicherheitsmaßnahmen
Fügen Sie Validierung und Einschränkungen hinzu:
def validate_command(command):
# Gefährliche Befehle blockieren
dangerous_patterns = ['rm -rf /', 'format', ':(){:|:&};:']
for pattern in dangerous_patterns:
if pattern in command:
return False, f"Command contains dangerous pattern: {pattern}"
# Weitere Validierung nach Bedarf hinzufügen
return True, NoneAnzeigen und Bearbeiten von Textdateien mit Claude