Windowsのコマンドライン環境としてCmder とそれに同梱されているBashで作業をしていて,タイトルにあることがやりたくなったのでメモ代わりに初投稿です.
方法
バッチファイルでの方法(参考: https://commandprompt.noyokan.com/command/ck_admin.html, https://amksystem.com/cmd/cmd7/) と同様にWindowsの管理者権限を必要とするコマンドの返り値や出力で判定できる.(正規の方法はないんだろうか?)
今回はopenfiles
を使ってみる.外部コマンドなのでbashからでも呼べる.
openfiles > /dev/null 2>&1
IS_ADMIN=$?
これでIS_ADMIN
に管理者権限の有無が入る.(若干紛らわしいが管理者として実行されている場合が0
)
$?
がバッチファイルでいう%ERRORLEVEL%
相当の特殊変数.
プロンプトに表示する
操作している端末が管理者として実行されているのかすぐ分かるように表示したかったというのが今回の動機.
管理者として実行されている場合にはプロンプトにその旨を表示するようにする.
.bashrc
に次を書く.
openfiles > /dev/null 2>&1
IS_ADMIN=$?
_PS_ADMIN=''
if [ $IS_ADMIN -eq '0' ]; then
_PS_ADMIN='(as Admin)'
fi
PS1='\[\033]0;$MSYSTEM:${PWD//[^[:ascii:]]/?}\007\]\[\033[32m\]\u@\h \[\033[33m\]\w\[\033[36m\]`__git_ps1`\[\033[0m\] \033[31m$_PS_ADMIN\033[0m\n'
これで管理者として実行されている場合のみデフォルトのプロンプトに加えて赤字で(as Admin)と表示されるようになる.
おわりに
もっとましな方法やまともな書き方があったらご教授ください.