Cygwinから管理者権限でプログラムを実行する方法のメモ。
たとえばCygwin付属のpingコマンドは、ターミナル(minttyなど)が管理者権限で動作していない場合エラーとなってしまう。
$ ping localhost ping: socket: Operation not permitted
このような場合、cygstartコマンドを次のように使うと管理者権限で実行することができる。
$ cygstart --action=runas /usr/bin/ping localhost
これを利用して、sudoコマンドを定義することもできる。 具体的には、bashrcに次のような記述を追加する。
if [[ -n "$PS1" ]]; then
__sudo_cygwin() {
local executable=$(which "${1:-cmd}")
shift
/usr/bin/cygstart --action=runas "$executable" "$@"
}
if [[ -x "/usr/bin/cygstart" ]]; then
alias sudo=__sudo_cygwin
fi
fi
定義したsudoコマンドを使うと、次のようになる。
$ sudo ping localhost
sudo cmdで管理者コマンドプロンプトを起動することもできて便利。