aws sso --profile foo-profile login
とかでログインした後ログアウトを忘れたり、いまどのプロファイルでログイン中かとかが気になるようになってきた。ログアウト忘れてもしばらくしたら勝手にセッションは切れるけどなんとなく作業が終わったらすぐログアウトしてしまいたいと思った。
fish shell で対応してみる
コマンド実行後に何かをするというfunctionを定義することができるので*1、以下のようにコマンド実行後に正規表現で引っ掛けて変数にプロファイル名を保持するようにしてみた。
set -gx aws_sso_profile '' function aws_sso_postexec --on-event fish_postexec set sso_logged_in (string match -r 'aws sso --profile ([0-9a-z_-]+) login' $argv[1]) set sso_logged_out (string match -r 'aws sso logout' $argv[1]) if set -q sso_logged_in[2] set -gx aws_sso_profile $sso_logged_in[2] end if set -q sso_logged_out[1] set -gx aws_sso_profile '' end end
あとはfishのpromptをカスタマイズして、上で更新した aws_sso_profile
変数があれば表示する、みたいにする。
function fish_prompt --description 'Write out the prompt' # $aws_sso_profile 変数にプロファイル名が入っているか否かでpromptの表示を変える if string length -q -- $aws_sso_profile printf '%s%s%s%s%s%s%s[%s]%s $ ' (set_color green) $USER (set_color $fish_color_cwd) (prompt_pwd) (set_color normal) (fish_git_prompt) (set_color green) $aws_sso_profile (set_color normal) else printf '%s%s%s%s%s%s $ ' (set_color green) $USER (set_color $fish_color_cwd) (prompt_pwd) (set_color normal) (fish_git_prompt) end end
この状態でsso loginしたりlogoutしたりするとスクショの感じになった。
なお、作りは素朴なので実際にプロファイルでログイン成功しているかどうかとか、セッションが持続しているかどうかなどは一切確認していないです(なのでスクショのように foo-profile
が存在しなくてもpromptが変わっている)。
*1:function - create a function — fish-shell 3.5.1 documentation のfish_postexec