Поскольку в Cygwin нет команды sudo , сценарии, с которыми я хочу работать, не работают
./install.sh: line N: sudo: command not found
Какой стандартный способ обойти это? Редактирование скриптов для удаления sudo
? Приобретаете какой-нибудь sudo
похожий инструмент для Windows?
windows
command-line
cygwin
Джейсон Сундрам
источник
источник
Ответы:
Я написал (довольно простой) TOUACExt для SUDO для CygWin , автоматизацию сценариев оболочки перед бета-тестированием, которая подходит к классическому поведению
sudo
для Linux:Для установки требуется скопировать четыре
.sh
сценария в какой-либо каталог пути, создать псевдоним и еще несколько шагов, подробно описанных в теме.Результаты : вы набираете один
sudo YourCommand
и получаете его результат, не беспокоясь об остальной части процесса.источник
Один из способов - создать поддельную команду «sudo» со следующим содержимым:
Это позволит
install.sh
продолжить, потому что sudo найден.Это не повышает привилегии, как это делает настоящий sudo. Если вам действительно нужны повышенные привилегии, запустите оболочку Cygwin с учетной записью с правами администратора (XP) или щелкните правой кнопкой мыши на cygwin.bat и «запустите от имени администратора» (Vista, Win7)
источник
bash
: почему это работает? На странице руководства ничего не говорится о том,$@
чтобы что- то делатьsudo
. Вместо этого это всего лишь аргументы сценария. И разве цитаты вокруг этого не будут лишними в этом случае? В противном случае, если вы сделаете a,sudo foo bar
он попытается выполнить"foo bar"
как одну команду, которая, вероятно, не существует, учитывая этот иррациональный страх перед пробелами в UNIX-подобных системах."$@"
(в двойных кавычках) работает иначе,"$*"
чем в отдельном слове для каждой позиционной переменной. Пример: если$1 == "foo bar"
и$2 == "baz"
, то"$@"
есть"foo bar" baz
- одно слово для каждого параметра (в отличие"$*"
, что приводит"foo bar baz"
к одному слову). См. Руководствоbash
, раздел Параметры , подраздел Специальные параметры . Конечный результат сценария Peon заключается в том, что он выполняет свои аргументы в точности так, как они были переданы.sudo
часть входит? Выше фрагмент не делает ничего удаленно в этом направлении, верно?sudo
поднимет привилегии от смертных доroot
до запуска команды. В Cygwin такого нет, поэтому поддельный скрипт Peon (который вы должны назватьsudo
) просто запускает команду без изменения ее привилегий. (Это означает, что вам может потребоваться работать./install.sh
от имени администратора.)runas
должно работать, оно не зависит от UAC и запрашивает пароль само по себе. Я был просто смущен, почему сценарий в ответе, очевидно, не сделал то, что подразумевалось под названием, которое я считал целью. Извините за мою глупость ;-)Я нашел ответ в списке рассылки cygwin . Для запуска
command
с повышенными привилегиями в Cygwin, перед командойcygstart --action=runas
введите так:Откроется диалоговое окно Windows, запрашивающее пароль администратора, и запустите команду, если введен правильный пароль.
Это легко в сценарии, пока
~/bin
на вашем пути:Протестировано на 64-битной Windows 8.
источник
cygstart
метода заключается в том, что он работает только для команд / программ Windows. Вы не можете сделатьsudo ls
. SUDO для CygWin аккуратен, но в нем все еще нет хорошейsudo
команды.sudo ls
Cygwin?sudo
CygWin для запуска любой команды Windows или CygWin. Это очень полезно для меня. Но более практичный метод, который я нашел, - это скрипт-оболочка для SUDO для CygWin, который я разработал: superuser.com/questions/741345/… (все еще в бета-версии, но, похоже, работает). С его помощью вы можете удобно заказать такие вещи, какsudo net start vncserver
./bin
и/usr/bin
изPATH
. Он успешно вызывает emacs:ShellExecute(NULL, "runas", "C:\cygwin64\bin\emacs-w32.exe", "(null)", "(null)", 1)
но тогда emacs не может найти,ls
напримерM-x dired
, даже после интерактивного восстановления PATH с помощью(setenv ...)
. Есть ли здесь проблема с доверенными путями?Основываясь на ответе dotancohen, я использую псевдоним:
Работает как брелок для внешних программ (но не встроенных в оболочку):
источник
Sudo (Elevate) для Windows ™
Я много работаю над командной строкой в Windows ™.
Я считаю, что в самом Cygwin вы можете запускать команду root с помощью
su -c /the/cmd
as для самого sudo в файловой системе Windows ™, повышая права пользователя из командной строки. Если вы являетесь администратором, это отлично подойдет для вас. В противном случае используйте runas и получите пароль администратора;).Сейчас я не могу вспомнить, откуда у нас этот код, но вот он. Я надеюсь, что это помогает.
Кстати, пакет, который мы используем для компиляции, был
gcc-mingw32
.источник
Небольшое улучшение по батрак в поддельной SUDO сценария:
Этот скрипт молча отбрасывает все параметры, переданные в sudo, и выполняет команду (фактически не повышая привилегии). Отбрасывание опций несколько улучшает совместимость. Более полный скрипт-обертка должен фактически анализировать параметры так же, как это делает sudo.
Вместо того, чтобы пытаться заменить sudo на оболочку, которая это делает
cygstart --action=runas "$@"
, просто используйте эту простую поддельную оболочку sudo и запустите сам скрипт установки (или все, что вы пытаетесь запустить с использованием sudo) с повышенными привилегиями.источник