Skip to content

原文(日本語に翻訳)

サンドボックス化されたコマンドで zsh のヒアドキュメントが「read-only file system」エラーで失敗する問題を修正しました(anthropics/claude-code#25990)。

原文(英語)

Fixed zsh heredoc failing with "read-only file system" error in sandboxed commands (anthropics/claude-code#25990)

概要

Claude Codeのサンドボックスモードでzshを使用する際、ヒアドキュメント(<<EOF構文)を含むコマンドが「read-only file system」エラーで失敗するバグが修正されました。ヒアドキュメントの処理に一時ファイルを使用するzshの動作がサンドボックスの書き込み制限と衝突していました。修正後はサンドボックス環境でもヒアドキュメントが正常に動作します。

基本的な使い方

bash
# zsh でヒアドキュメントを使うコマンドの例
cat <<EOF
Hello, World!
This is a heredoc
EOF

# または変数展開なしのヒアドキュメント
cat <<'EOF'
$PATH はそのまま出力されます
EOF

# 修正前(サンドボックスモード有効時):
# zsh: read-only file system: /tmp/zsh12345

# 修正後:
# Hello, World!
# This is a heredoc

実践例

ユースケース1: 設定ファイルの生成

ヒアドキュメントを使って設定ファイルを作成するコマンド。

bash
# Dockerfileの生成
cat <<EOF > /tmp/Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
CMD ["node", "server.js"]
EOF

# nginx設定ファイルの生成
cat <<EOF > /tmp/nginx.conf
server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://localhost:3000;
    }
}
EOF

# 修正後: サンドボックスモードでも上記が正常に実行される

ユースケース2: スクリプトのインラインアクション

ヒアドキュメントを使ってインラインスクリプトを実行する場合。

bash
# Python スクリプトをヒアドキュメントで実行
python3 <<EOF
import json
data = {"name": "test", "value": 42}
print(json.dumps(data, indent=2))
EOF

# SQLクエリのヒアドキュメント実行
psql -U myuser mydb <<EOF
SELECT table_name, pg_size_pretty(pg_total_relation_size(table_name::regclass))
FROM information_schema.tables
WHERE table_schema = 'public'
ORDER BY pg_total_relation_size(table_name::regclass) DESC;
EOF

# 修正後: サンドボックスモードでも正常動作

ユースケース3: テンプレートベースのファイル生成

変数を使ったテンプレートファイルの生成。

bash
# 環境変数を展開したYAMLファイルの生成
APP_NAME="myapp"
VERSION="1.0.0"

cat <<EOF > /tmp/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ${APP_NAME}
  labels:
    version: "${VERSION}"
spec:
  replicas: 3
  selector:
    matchLabels:
      app: ${APP_NAME}
EOF

echo "Deployment manifest generated for ${APP_NAME} v${VERSION}"

# 修正後: サンドボックス環境でもテンプレート展開が正常に動作

注意点

  • この問題はzsh特有のものです。bashのヒアドキュメントはサンドボックスでも問題なく動作していました
  • サンドボックスモードはClaude Codeがセキュリティのためにコマンドを制限された環境で実行するモードです
  • /tmp ディレクトリへのヒアドキュメント一時ファイル書き込みがサンドボックスで制限されていたことが原因でした
  • デフォルトシェルがzshのmacOSユーザーはこの問題の影響を特に受けやすかったです

関連情報