Постановка проблемы: Какой самый элегантный и надежный способ проверить, является ли mintty
bash
сеанс Cygwin «Запуск от имени администратора»?
Почему конкретно? У меня обычно несколько mintty
терминалов открываются при использовании Windows ( mintty
нет вкладок). Самое неловкое, когда мне нужно найти окно терминала, которое я запустил, щелкнув правой кнопкой мыши «Запуск от имени администратора», когда, например, я хочу запустить ping
или другую одноразовую процедуру. Я хотел бы визуально указать «запуск от имени администратора» сеанса терминала (изменив bash
переменную приглашения оболочки PS1
в моем файле запуска ~/.bashrc
).
Некоторые быстрые потенциальные решения:
- Я могу сравнить значение некоторых переменных среды. При быстром взгляде на
env
результаты есть довольно много различий. Однако трудно сказать, какой из них является наиболее надежным с точки зрения переносимости на другую машину Windows (возможно, под управлением другой версии Windows). id
более конкретноid -Gn
показывает различные группы, если они запускаются от имени администратора. В моей машине Windows 7 У меня естьAdministrators
иroot
группы , добавленные в список. Опять же, я не уверен, что это портативный.- Я мог бы попытаться записать файл в папку, которая не сработала бы как обычный пользователь. Но я не хочу записывать какие-либо файлы в странные места - в некоторых воображаемых сценариях это может быть потенциально разрушительным (например, выход из строя носителя), и это кажется мне совершенно неуместным.
- Запуск некоторой программы Windows, которая сообщит статусом возврата или выводом, если команда запускается «как администратор». Лучше всего будет с аналогичной целью команды UNIX
id(1)
(но изначально существующей в Windows - или Cygwin, но без слишком надуманного перевода системных понятий Windows в эмулируемые POSIX-концепции).
Есть лучшие или более элегантные предложения? Возможно, cygwin предоставляет командную утилиту, предназначенную для этой цели?
Обновление: 97% дубликатов /programming/4051883/batch-script-how-to-check-for-admin-rights/ - разница только в том, bash
чтобы использовать вместо (имхо странно и архаично) Windows cmd.exe
, Пожалуйста, проверьте ответы и комментарии там.
mintty
: 1. работает как администратор, 2. использует другой файл конфигурации с другим цветом настройки и 3. использует альтернативный значок. Если вы опишете широкой публике, как это создать, я дам вам голос (если вы не скажете в своем ответе, что это не может быть сделано в сценарии :-).Foo
группы пользователей, если хотите.sudo
что требуется, даже если вы работаете как пользователь root.Ответы:
Я просто написал эту функцию по той же причине. Я никогда не знаю, какая оболочка имеет права администратора.
Это адаптировано из этого ответа /programming//a/11995662/307968 для оболочки Windows cmd. Net Session возвращает 0 статуса, если вы являетесь администратором.
Теперь мне просто нужно изменить подсказку или, возможно, цвет заголовка ....
источник
Окончательный ответ на этот вопрос приходит из списка рассылки Cygwin . Процесс выполняется с правами администратора, если пользователь, который его запустил, является частью группы 544 (администраторы). Также из комментария ниже Cromax, кажется, что группа 114 (локальная учетная запись и член группы администраторов) также иногда присутствует. Тест для этих двух групп
Например,
В прошлом вам также нужно было проверять группу 0, корневую группу в / etc / group. Но / etc / group больше не устанавливается в Cygwin, и обычно его следует удалять, если он присутствует, поэтому больше не рекомендуется проверять и группу 0. Всего группа 544.
источник
id
выводе, а именно 114 (Локальная учетная запись и член группы администраторов). Таким образом, регулярное выражение должно быть обновлено до:id -G | grep -qE '\<(114|544)\>' && echo admin || echo user
Я использую возвращаемое значение программы Windows
at
. Я также воссоздала функциональность специального подсказки\$
.источник
id
в Windows нет эквивалента команды UNIX , я принимаю это как правильный ответ. По крайней мере, выполнениеat
команды без каких-либо аргументов не имеет побочных эффектов. Теперь я собираюсь использовать этот метод в моем.bashrc
файле! Спасибо за взлом.id -G | grep -qE '\<(544|0)\>'
Похоже, это не сработало для меня, так как мой вывод не имел ни <>, ни 544, даже когда был повышен Однако, так как для записи требуется повышение прав%WINDIR%\system32
, я использовал это для проверки повышения с помощью функции оболочки:Применительно к прекрасной идее Стивена о красном хэш-персонаже:
источник
Сделайте то, что может сделать только админ, и проверьте, успешно или нет: -
или
или
или
источник
В Msys на Windows попробуйте это (я нашел, что принятый ответ не работает в Msys)
at &> /dev/null && echo "Running as admin" || echo "NOT running as admin"
Это зависит от кода возврата,
at
равного нулю, только при запуске от имени администратора.источник