Pernyataan Masalah: Apa cara paling elegan dan tangguh untuk menguji apakah mintty
bash
sesi Cygwin adalah "Jalankan sebagai administrator"?
Kenapa, secara spesifik? Saya biasanya memiliki beberapa mintty
terminal terbuka saat menggunakan Windows ( mintty
tidak memiliki tab). Yang paling canggung adalah ketika saya harus menemukan jendela terminal yang saya mulai dengan mengklik kanan "Run as administrator" ketika misalnya saya ingin menjalankan ping
atau prosedur satu kali lainnya. Saya ingin menunjukkan "run as administrator" -ness sesi terminal secara visual (dengan mengubah bash
variabel prompt shell PS1
dalam file start-up saya ~/.bashrc
).
Beberapa solusi potensial cepat:
- Saya dapat membandingkan nilai beberapa variabel lingkungan. Dengan cepat melihat
env
output ada banyak perbedaan. Namun sulit untuk mengatakan mana yang paling dapat diandalkan dalam hal portabilitas ke mesin Windows lain (mungkin menjalankan versi Windows yang berbeda). id
, lebih khususid -Gn
menunjukkan grup yang berbeda jika dijalankan sebagai administrator. Di mesin Windows 7 saya, saya memilikiAdministrators
danroot
grup ditambahkan ke daftar. Sekali lagi, saya tidak yakin apakah ini portabel.- Saya bisa mencoba menulis file ke lokasi yang akan gagal sebagai pengguna biasa. Tapi saya tidak ingin menulis file apa pun ke tempat-tempat aneh - ini bisa dalam beberapa skenario yang dibayangkan berpotensi merusak (misalnya gagal media penyimpanan) dan ini tampaknya sama sekali tidak sesuai dengan selera saya.
- Menjalankan beberapa program Windows yang akan ditunjukkan dengan mengembalikan status atau keluaran jika perintah dijalankan "sebagai administrator". Yang terbaik adalah beberapa dengan tujuan analog dengan
id(1)
perintah UNIX (tetapi secara native ada di Windows - atau Cygwin, tetapi tanpa terlalu jauh menerjemahkan konsep sistem Windows ke konsep yang ditiru POSIX).
Ada saran yang lebih baik atau lebih elegan? Mungkin cygwin menyediakan utilitas perintah yang didedikasikan untuk tujuan ini?
Pembaruan: 97% duplikat dari /programming/4051883/batch-script-how-to-check-for-admin-rights/ - perbedaannya hanya ada di sini menggunakan bash
alih-alih (IMHO aneh dan kuno) Windows cmd.exe
. Silakan periksa jawaban dan komentar di sana.
mintty
1. yang dijalankan sebagai administrator, 2. menggunakan file konfigurasi berbeda dengan warna berbeda. pengaturan dan 3. menggunakan ikon alternatif. Jika Anda menjelaskan kepada masyarakat umum cara membuat ini, saya akan memberi Anda upvote (kecuali jika Anda mengatakan dalam jawaban Anda bahwa itu tidak dapat dilakukan dalam skrip :-).Foo
grup pengguna jika Anda mau.sudo
yang diperlukan bahkan jika Anda menjalankan sebagai pengguna root.Jawaban:
Saya baru saja menulis fungsi ini untuk alasan yang sama. Saya tidak pernah tahu shell mana yang memiliki hak admin.
Itu diadaptasi dari jawaban ini /programming//a/11995662/307968 untuk windows cmd shell. Sesi Net mengembalikan 0 status jika Anda adalah admin.
Sekarang saya hanya perlu mengubah prompt saya, atau mungkin warna batang judul ....
sumber
Jawaban pasti untuk pertanyaan ini berasal dari milis Cygwin . Suatu proses berjalan dengan hak Administrator jika pengguna yang memulai itu adalah bagian dari grup 544 (Administrator). Juga dari komentar di bawah oleh Cromax, tampaknya grup 114 (Akun lokal dan anggota grup Administrator) juga terkadang hadir. Tes untuk dua kelompok ini adalah
Sebagai contoh,
Di masa lalu Anda juga perlu memeriksa grup 0, grup root di / etc / group. Tapi / etc / group tidak lagi diinstal di Cygwin, dan biasanya harus dihapus jika ada, jadi tidak lagi disarankan untuk memeriksa grup 0 juga. Hanya kelompok 544.
sumber
id
output, yaitu 114 (Akun lokal dan anggota grup Administrator). Jadi regexp harus diperbarui ke:id -G | grep -qE '\<(114|544)\>' && echo admin || echo user
Saya menggunakan nilai pengembalian program Windows
at
. Saya juga menciptakan kembali fungsi karakter khusus PROMPTING\$
.sumber
id
perintah UNIX di Windows, saya menerima ini sebagai jawaban yang benar. Setidaknya menjalankanat
perintah tanpa argumen tampaknya tidak memiliki efek samping. Saya akan menggunakan metode ini dalam.bashrc
file saya mulai sekarang! Terima kasih untuk hacknya.id -G | grep -qE '\<(544|0)\>'
sepertinya tidak bekerja untuk saya, karena output saya tidak memiliki <> atau 544 bahkan ketika meningkat. Namun, karena ketinggian diperlukan untuk menulis%WINDIR%\system32
, saya menggunakannya untuk menguji ketinggian dengan fungsi shell:Ketika diterapkan pada ide bagus Steven tentang karakter hash merah:
sumber
Lakukan sesuatu yang hanya bisa dilakukan oleh admin dan menguji keberhasilan atau kegagalan: -
atau
atau
atau
sumber
Di Msys pada Windows coba ini (saya menemukan jawaban yang diterima tidak berfungsi di Msys)
at &> /dev/null && echo "Running as admin" || echo "NOT running as admin"
Ini bergantung pada kode kembali
at
menjadi nol hanya ketika dijalankan sebagai admin.sumber