開発ヒント: コンソール出力をクリップボードに自動的にコピーする

カテゴリ: Linux / シェルの生産性
プラットフォーム: Linux (zsh + Konsole/KDE)


## 問題

AI アシスタントを使用する場合、多くの場合、ターミナル出力をコピーしてチャットに貼り付ける必要があります。これは通常、次のことを意味します。

  1. コマンドを実行する

  2. マウスで出力を選択します

  3. コピー

  4. ブラウザに切り替える 5.貼り付け

それは手順が多すぎます。


解決策: preexec / precmd による自動キャプチャ

これを ~/.zshrc に追加します。

# === AUTO-OUTPUT LOGGER ===
# Automatically saves console output to ~/t.txt and copies to clipboard.
# Toggle: set AUTO_CLIPBOARD=true/false
AUTO_CLIPBOARD=true

# Redirect stdout+stderr to ~/t.txt before each command
preexec() {
    case "$1" in
        sudo*|su*) return ;;
        *) exec > >(tee ~/t.txt) 2>&1 ;;
    esac
}


precmd() {
    exec >/dev/tty 2>&1
    if [ "$AUTO_CLIPBOARD" = "true" ] && [ -s ~/t.txt ]; then
        cleaned=$(cat ~/t.txt \
            | sed 's/\][0-9]*;[^]]*\][0-9]*;//g; s/^[0-9]*;//g' \
            | sed "s|$HOME|~|g" \
            | sed 's/[^[:print:]]//g' \
            | grep -v '^$')
        if [ -n "$cleaned" ]; then
            echo "$cleaned" | xclip -selection clipboard
            echo "[📋 In Zwischenablage kopiert]"
        fi
    fi
}

次にリロードします。

source ~/.zshrc

### 結果

すべてのコマンドの後、出力は自動的にクリップボードに保存され、Ctrl+V を使用して AI チャットに貼り付けることができます。

出力は常に参照用に ~/t.txt に保存されます。


仕組み

パート

何をするのか

preexec()

各コマンドの前に実行され、出力が ~/t.txt にリダイレクトされます。

precmd()

各コマンドの後に実行され、標準出力が復元され、クリップボードにコピーされます。

tee ~/t.txt

出力をターミナルに表示しながらファイルに保存します。

sed '...'

KDE Konsole タイトルのエスケープ シーケンス (]2;... ]1;) を削除します。

xクリップ

クリーンアップされた出力をクリップボードにコピーします。


## 要件

# Install xclip if not present
sudo pacman -S xclip       # Manjaro/Arch
sudo apt install xclip     # Ubuntu/Debian

⚠️してはいけないこと

fc -ln -1 | 'は **使用しないでください** bash を実行して最後のコマンドを再実行します。

# ❌ DANGEROUS - do not use!
precmd() {
    output=$(fc -ln -1 | bash 2>&1)  # Re-executes last command!
    echo "$output" | xclip -selection clipboard
}

これにより、すべてのコマンドが終了後に再実行され、ファイルの上書き、git commit の再実行、sed -i の再実行など、破壊的な副作用が発生する可能性があります。

上記の「preexec」/「precmd」アプローチは、実行中、安全かつ信頼性の高い出力をキャプチャします。