Lo strumento bash consente a Claude di eseguire comandi shell in una sessione bash persistente, permettendo operazioni di sistema, esecuzione di script e automazione da riga di comando.
Lo strumento bash fornisce a Claude:
| Modello | Versione dello strumento |
|---|---|
| Modelli Claude 4 e Sonnet 3.7 (deprecato) | bash_20250124 |
Le versioni precedenti dello strumento non sono garantite essere retrocompatibili con i modelli più recenti. Utilizza sempre la versione dello strumento che corrisponde alla versione del tuo modello.
Lo strumento bash mantiene una sessione persistente:
| Parametro | Obbligatorio | Descrizione |
|---|---|---|
command | Sì* | Il comando bash da eseguire |
restart | No | Impostare su true per riavviare la sessione bash |
*Obbligatorio a meno che non si utilizzi restart
Claude può concatenare comandi per completare attività complesse:
# Richiesta dell'utente
"Install the requests library and create a simple Python script that fetches a joke from an API, then run it."
# Lo strumento di Claude utilizza:
# 1. Installa il pacchetto
{"command": "pip install requests"}
# 2. Crea lo 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. Esegui lo script
{"command": "python fetch_joke.py"}La sessione mantiene lo stato tra i comandi, quindi i file creati nel passaggio 2 sono disponibili nel passaggio 3.
Lo strumento bash è implementato come uno strumento senza schema. Quando utilizzi questo strumento, non è necessario fornire uno schema di input come con altri strumenti; lo schema è integrato nel modello di Claude e non può essere modificato.
Quando implementi lo strumento bash, gestisci vari scenari di errore:
Lo strumento bash fornisce accesso diretto al sistema. Implementa queste misure di sicurezza essenziali:
ulimit per impostare vincoli di risorsesudo, rm -rf, ecc.)The bash tool adds 245 input tokens to your API calls.
Additional tokens are consumed by:
Vedi prezzi dell'utilizzo degli strumenti per i dettagli completi sui prezzi.
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 o prompt di passwordLo strumento bash è più potente quando combinato con l'editor di testo e altri strumenti.
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."}
]
)Configura un ambiente bash
Crea una sessione bash persistente con cui Claude può interagire:
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()Gestisci l'esecuzione dei comandi
Crea una funzione per eseguire comandi e acquisire l'output:
def execute_command(self, command):
# Invia il comando a bash
self.process.stdin.write(command + '\n')
self.process.stdin.flush()
# Acquisisci l'output con timeout
output = self._read_output(timeout=10)
return outputElabora le chiamate degli strumenti di Claude
Estrai ed esegui i comandi dalle risposte di 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)
# Restituisci il risultato a Claude
tool_result = {
"type": "tool_result",
"tool_use_id": content.id,
"content": result
}Implementa misure di sicurezza
Aggiungi convalida e restrizioni:
def validate_command(command):
# Blocca i comandi pericolosi
dangerous_patterns = ['rm -rf /', 'format', ':(){:|:&};:']
for pattern in dangerous_patterns:
if pattern in command:
return False, f"Command contains dangerous pattern: {pattern}"
# Aggiungi ulteriore convalida secondo le necessità
return True, NoneVisualizza e modifica file di testo con Claude