開発ヒント: コンソール出力をクリップボードに自動的にコピーする¶
カテゴリ: Linux / シェルの生産性
プラットフォーム: Linux (zsh + Konsole/KDE)
## 問題
AI アシスタントを使用する場合、多くの場合、ターミナル出力をコピーしてチャットに貼り付ける必要があります。これは通常、次のことを意味します。
コマンドを実行する
マウスで出力を選択します
コピー
ブラウザに切り替える 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 に保存されます。
仕組み¶
パート |
何をするのか |
|---|---|
|
各コマンドの前に実行され、出力が |
|
各コマンドの後に実行され、標準出力が復元され、クリップボードにコピーされます。 |
|
出力をターミナルに表示しながらファイルに保存します。 |
|
KDE Konsole タイトルのエスケープ シーケンス ( |
|
クリーンアップされた出力をクリップボードにコピーします。 |
## 要件
# 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」アプローチは、実行中、安全かつ信頼性の高い出力をキャプチャします。