ターミナルにうっかり大量のコマンドや文字列をペーストしてしまって、画面が固まったり、意図しないコマンドが一気に実行されてしまった…という経験はありませんか?
この記事では、Mac のターミナル(zsh使用)で、誤って大量のテキストを貼り付けてしまう事故を未然に防ぐ方法をご紹介します。
何が問題なのか?
GUI ターミナルでは、クリップボードからコマンドを一括ペーストできるため、たとえば:
rm -rf /some/important/directory
...
100行分のコマンド
のような内容を 意図せず一気に貼り付けてしまい、Enterキー一発で大量実行される危険があります。
【解決方法:zsh に「大量ペースト警告機能」を追加する】
zsh の設定ファイル .zshrc に以下の関数を追加することで、指定した行数以上のペーストが発生したときに、実行前に確認を求めるようにできます。
手順(Mac + zsh)
.zshrcを開く
nano ~/.zshrc
または好きなエディタで開いてください。
- 以下のコードを
.zshrcの一番下に貼り付ける
# === 大量ペーストに警告を出す設定 ===
function zle_bracketed_paste() {
local buf
IFS= read -rd '' buf
local lines=$(echo "$buf" | wc -l)
if (( lines > 20 )); then
echo "⚠️ $lines 行のペーストが検出されました。貼り付けますか? [y/N]"
read -r ans
[[ "$ans" == "y" || "$ans" == "Y" ]] && LBUFFER+=$buf
else
LBUFFER+=$buf
fi
}
zle -N bracketed-paste zle_bracketed_paste
※ lines > 20 の数値はお好みで調整できます。
- 設定を反映する
source ~/.zshrc
【動作確認】
試しに20行以上の内容をペーストしてみてください。
⚠️ 23 行のペーストが検出されました。貼り付けますか? [y/N]
yまたはY→ 貼り付け実行- それ以外 → 無視される(貼り付けられない)
【カスタマイズ例:もっと強く警告を出す】
警告メッセージをより目立たせたい場合は、次の2行を if 文の中に追加すると、画面を一度クリアして注意を引くことができます。
echo "🚨🚨🚨 これは $lines 行の大量ペーストです 🚨🚨🚨"
注意点・互換性
- zsh の ZLE(Zsh Line Editor)機能を利用しています
- cursor や iTerm2 などモダンなターミナルでは動作確認済み
- bash ではこの設定は使えません(bash向けの対応が別途必要)
まとめ
| 対策 | 内容 |
|---|---|
.zshrc に関数追加 | 行数チェック+警告プロンプトを表示 |
source ~/.zshrc | 設定を反映 |
| ペースト制限の閾値は調整可能 | 20 → 任意の値に変更可 |
誤ペーストによる事故は意外と多く、一発で取り返しのつかない操作につながることもあります。
普段から「貼り付け=安全ではない」意識を持つのはもちろん、zsh に一工夫加えて事故を防ぐ仕組みを入れておくのが安心です。


コメント