LLMで生成。以下を~/.zshrc
に追加する。
function ssh() {
local args=("$@")
local iTermHost=""
# (1) 引数をざっと解析して「ホストっぽいもの」を探す
# - 「--」が来たらオプション解析は終わり
# - `-xxx` のようなハイフンから始まるものはオプションとみなす
# - それ以外を見つけたら、それをホスト名候補として取り出す
local parsingOptions=1
for arg in "${args[@]}"; do
# オプション解析の終了を示す "--" が来たらパース終了
if [[ "$arg" == "--" ]]; then
parsingOptions=0
continue
fi
# まだオプションを解析中
if [[ $parsingOptions -eq 1 ]]; then
if [[ "$arg" =~ ^- ]]; then
# ハイフンから始まればオプションとみなしてスキップ
continue
else
# これがホスト名(もしくは user@host)だとみなして記録
iTermHost="$arg"
parsingOptions=0 # 一旦ホストが見つかったら解析終了
fi
else
# すでにホスト名は見つかっているので無視 (command 部分など)
break
fi
done
# (2) user@host 形式ならホスト部だけ抜き出す
if [[ "$iTermHost" == *@* ]]; then
iTermHost="${iTermHost#*@}" # user@host → host
fi
# (3) バッジを設定(iTerm2 以外の場合は何もしなくてもOK)
if [[ -n "$iTermHost" ]]; then
echo -ne "\033]1337;SetBadgeFormat=$(echo -n "$iTermHost" | base64)\a"
else
# ホスト名がとれなかった場合、空にする or 何もしないなど好みで
echo -ne "\033]1337;SetBadgeFormat=$(echo -n "" | base64)\a"
fi
# (4) 実際の ssh を呼び出す
# /usr/bin/ssh のパスはご自身の環境に合わせて修正
/usr/bin/ssh "${args[@]}"
# (5) SSH終了後にバッジをリセット(空にするなどお好みで)
echo -ne "\033]1337;SetBadgeFormat=$(echo -n "" | base64)\a"
}