Alat bash memungkinkan Claude untuk menjalankan perintah shell dalam sesi bash yang persisten, memungkinkan operasi sistem, eksekusi skrip, dan otomasi baris perintah.
Alat bash menyediakan Claude dengan:
| Model | Versi Alat |
|---|---|
| Model Claude 4 dan Sonnet 3.7 (deprecated) | bash_20250124 |
Versi alat yang lebih lama tidak dijamin kompatibel mundur dengan model yang lebih baru. Selalu gunakan versi alat yang sesuai dengan versi model Anda.
Alat bash mempertahankan sesi yang persisten:
| Parameter | Diperlukan | Deskripsi |
|---|---|---|
command | Ya* | Perintah bash yang akan dijalankan |
restart | Tidak | Atur ke true untuk memulai ulang sesi bash |
*Diperlukan kecuali menggunakan restart
Claude dapat merantai perintah untuk menyelesaikan tugas kompleks:
# Permintaan pengguna
"Install the requests library and create a simple Python script that fetches a joke from an API, then run it."
# Alat Claude menggunakan:
# 1. Instal paket
{"command": "pip install requests"}
# 2. Buat skrip
{"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. Jalankan skrip
{"command": "python fetch_joke.py"}Sesi mempertahankan status di antara perintah, jadi file yang dibuat di langkah 2 tersedia di langkah 3.
Alat bash diimplementasikan sebagai alat tanpa skema. Saat menggunakan alat ini, Anda tidak perlu menyediakan skema input seperti alat lainnya; skema sudah tertanam dalam model Claude dan tidak dapat dimodifikasi.
Saat mengimplementasikan alat bash, tangani berbagai skenario kesalahan:
Alat bash menyediakan akses sistem langsung. Implementasikan langkah-langkah keamanan penting ini:
ulimit untuk menetapkan batasan sumber dayasudo, rm -rf, dll.)The bash tool adds 245 input tokens to your API calls.
Additional tokens are consumed by:
Lihat harga penggunaan alat untuk detail harga lengkap.
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, atau permintaan kata sandiAlat bash paling kuat ketika digabungkan dengan editor teks dan alat lainnya.
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."}
]
)Siapkan lingkungan bash
Buat sesi bash persisten yang dapat berinteraksi dengan 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()Tangani eksekusi perintah
Buat fungsi untuk menjalankan perintah dan menangkap output:
def execute_command(self, command):
# Kirim perintah ke bash
self.process.stdin.write(command + '\n')
self.process.stdin.flush()
# Tangkap output dengan timeout
output = self._read_output(timeout=10)
return outputProses panggilan alat Claude
Ekstrak dan jalankan perintah dari respons 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)
# Kembalikan hasil ke Claude
tool_result = {
"type": "tool_result",
"tool_use_id": content.id,
"content": result
}Implementasikan langkah-langkah keamanan
Tambahkan validasi dan pembatasan:
def validate_command(command):
# Blokir perintah berbahaya
dangerous_patterns = ['rm -rf /', 'format', ':(){:|:&};:']
for pattern in dangerous_patterns:
if pattern in command:
return False, f"Command contains dangerous pattern: {pattern}"
# Tambahkan validasi lebih lanjut sesuai kebutuhan
return True, NoneLihat dan edit file teks dengan Claude