Bash инструмент позволяет Claude выполнять команды оболочки в постоянной сессии bash, обеспечивая системные операции, выполнение скриптов и автоматизацию командной строки.
Bash инструмент предоставляет Claude:
| Модель | Версия инструмента |
|---|---|
| Claude 4 модели и Sonnet 3.7 (устарело) | bash_20250124 |
Старые версии инструмента не гарантируют обратную совместимость с новыми моделями. Всегда используйте версию инструмента, соответствующую версии вашей модели.
Bash инструмент поддерживает постоянную сессию:
| Параметр | Обязательный | Описание |
|---|---|---|
command | Да* | Команда bash для выполнения |
restart | Нет | Установите значение true для перезагрузки сессии bash |
*Обязательно, если не используется restart
Claude может объединять команды для выполнения сложных задач:
# Запрос пользователя
"Install the requests library and create a simple Python script that fetches a joke from an API, then run it."
# Claude's tool uses:
# 1. Install package
{"command": "pip install requests"}
# 2. Create 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. Run script
{"command": "python fetch_joke.py"}Сессия сохраняет состояние между командами, поэтому файлы, созданные на шаге 2, доступны на шаге 3.
Bash инструмент реализован как инструмент без схемы. При использовании этого инструмента вам не нужно предоставлять входную схему, как с другими инструментами; схема встроена в модель Claude и не может быть изменена.
При реализации bash инструмента обрабатывайте различные сценарии ошибок:
Bash инструмент предоставляет прямой доступ к системе. Реализуйте эти необходимые меры безопасности:
ulimit для установки ограничений ресурсовsudo, rm -rf и т.д.)The bash tool adds 245 input tokens to your API calls.
Additional tokens are consumed by:
Полные сведения о ценах см. в разделе цены на использование инструментов.
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 или запросы пароляBash инструмент наиболее мощен при комбинировании с текстовым редактором и другими инструментами.
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."}
]
)Установка окружения bash
Создайте постоянную сессию bash, с которой Claude может взаимодействовать:
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()Обработка выполнения команд
Создайте функцию для выполнения команд и захвата вывода:
def execute_command(self, command):
# Send command to bash
self.process.stdin.write(command + '\n')
self.process.stdin.flush()
# Capture output with timeout
output = self._read_output(timeout=10)
return outputОбработка вызовов инструментов Claude
Извлекайте и выполняйте команды из ответов 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)
# Return result to Claude
tool_result = {
"type": "tool_result",
"tool_use_id": content.id,
"content": result
}Реализация мер безопасности
Добавьте валидацию и ограничения:
def validate_command(command):
# Block dangerous commands
dangerous_patterns = ['rm -rf /', 'format', ':(){:|:&};:']
for pattern in dangerous_patterns:
if pattern in command:
return False, f"Command contains dangerous pattern: {pattern}"
# Add more validation as needed
return True, NoneПросмотр и редактирование текстовых файлов с Claude