Opis problemu: Jaki jest najbardziej elegancki i niezawodny sposób na sprawdzenie, czy mintty
bash
sesja Cygwin to „Uruchom jako administrator”?
Dlaczego konkretnie? Zazwyczaj mam kilka mintty
otwartych terminali podczas korzystania z systemu Windows ( mintty
nie ma zakładek). Najbardziej niezręczne jest, gdy muszę znaleźć okno terminala, które uruchomiłem, klikając prawym przyciskiem myszy „Uruchom jako administrator”, gdy na przykład chcę uruchomić ping
lub inną jednorazową procedurę. Chciałbym wskazać wizualnie „uruchom jako administrator” sesji terminala (zmieniając bash
zmienną zachęty powłoki PS1
w moim pliku startowym ~/.bashrc
).
Kilka szybkich potencjalnych rozwiązań:
- Potrafię porównać wartość niektórych zmiennych środowiskowych. Po szybkim spojrzeniu na
env
wynik jest dość wiele różnic. Trudno jednak stwierdzić, która z nich jest najbardziej niezawodna pod względem możliwości przenoszenia na inny komputer z systemem Windows (być może z inną wersją systemu Windows). id
, dokładniejid -Gn
pokazuje różne grupy, jeśli są uruchamiane jako administrator. Na moim komputerze z systemem Windows 7 mamAdministrators
iroot
grupy dodane do listy. Ponownie nie jestem pewien, czy jest to przenośne.- Mógłbym spróbować zapisać plik w lokalizacji, która zawiodłaby jako normalny użytkownik. Ale nie chcę zapisywać żadnych plików w dziwnych miejscach - w niektórych wyobrażonych scenariuszach może to być potencjalnie destrukcyjne (np. Awaria nośników pamięci) i wydaje mi się to zupełnie nieeleganckie.
- Uruchamianie jakiegoś programu Windows, który wskaże status powrotu lub wyjście, jeśli polecenie zostanie uruchomione „jako administrator”. Najlepsze byłyby takie, które mają analogiczny cel jak
id(1)
polecenie UNIX (ale natywnie istnieje w Windows - lub Cygwin, ale bez zbyt daleko idącego tłumaczenia koncepcji systemu Windows na emulowane przez POSIX).
Jakieś lepsze lub bardziej eleganckie sugestie? Być może cygwin udostępnia narzędzie poleceń przeznaczone do tego celu?
Aktualizacja: 97% duplikat /programming/4051883/batch-script-how-to-check-for-admin-rights/ - różnica polega tylko na zastosowaniu bash
zamiast (dziwnego i archaicznego systemu Windows) cmd.exe
. Sprawdź tam odpowiedzi i komentarze.
mintty
tego 1. działa jako administrator, 2. używa innego pliku konfiguracyjnego o różnych kolorach ustawienia i 3. używa alternatywnej ikony. Jeśli opiszesz ogółowi społeczeństwa, jak to stworzyć, dam ci głos uprzywilejowany (chyba że w odpowiedzi odpowiesz, że nie można tego zrobić w skrypcie :-).Foo
grupy użytkowników, jeśli chcesz.sudo
co jest wymagane, nawet jeśli działasz jako użytkownik root.Odpowiedzi:
Właśnie napisałem tę funkcję z tego samego powodu. Nigdy nie wiem, która powłoka ma uprawnienia administratora.
Zaadaptował z tej odpowiedzi /programming//a/11995662/307968 dla powłoki cmd systemu Windows. Net Session zwraca 0, jeśli jesteś administratorem.
Teraz muszę tylko zmienić monit, a może kolor paska tytułu ....
źródło
Ostateczna odpowiedź na to pytanie pochodzi z listy mailingowej Cygwin . Proces jest uruchamiany z uprawnieniami administratora, jeśli użytkownik, który go uruchomił, należy do grupy 544 (Administratorzy). Również z poniższego komentarza Cromax wydaje się, że grupa 114 (konto lokalne i członek grupy administratora) również czasami jest obecna. Test dla tych dwóch grup jest
Na przykład,
W przeszłości musiałeś także sprawdzać, czy jest grupa 0, grupa główna w / etc / group. Ale / etc / group nie jest już zainstalowany w Cygwin i zwykle powinien zostać usunięty, jeśli jest obecny, więc nie jest już zalecane sprawdzanie grupy 0. Tylko grupa 544.
źródło
id
, a mianowicie 114 (konto lokalne i członek grupy administratora). Dlategoid -G | grep -qE '\<(114|544)\>' && echo admin || echo user
Korzystam z wartości zwracanej programu Windows
at
. Odtworzyłem również funkcjonalność znaku specjalnego PROMPTING\$
.źródło
id
w systemie Windows nie ma odpowiednika polecenia UNIX , akceptuję to jako poprawną odpowiedź. Przynajmniej uruchomienieat
polecenia bez żadnych argumentów nie wydaje się mieć żadnych skutków ubocznych. Odtąd będę używać tej metody w moim.bashrc
pliku! Dzięki za włamanie.id -G | grep -qE '\<(544|0)\>'
nie działało dla mnie, ponieważ mój wynik nie miał ani <>, ani 544, nawet gdy był podwyższony. Ponieważ jednak do zapisu jest wymagane podniesienie uprawnień%WINDIR%\system32
, użyłem go do przetestowania podniesienia uprawnień za pomocą funkcji powłoki:W przypadku doskonałego pomysłu Stevena na postać z czerwonym haszem:
źródło
Zrób coś, co tylko administrator może zrobić i przetestować pod kątem sukcesu lub niepowodzenia: -
lub
lub
lub
źródło
W Msys na Windows spróbuj tego (okazało się, że zaakceptowana odpowiedź nie działa w Msys)
at &> /dev/null && echo "Running as admin" || echo "NOT running as admin"
Zależy to od tego, czy kod powrotu
at
wynosi zero tylko podczas działania jako administrator.źródło