Ponieważ w Cygwin nie ma polecenia sudo , skrypty, które chcę uruchomić, zawodzą
./install.sh: line N: sudo: command not found
Jaki jest standardowy sposób na obejście tego? Edytujesz skrypty do usunięcia sudo
? Dostajesz jakieś sudo
podobne narzędzie do systemu Windows?
windows
command-line
cygwin
Jason Sundram
źródło
źródło
Odpowiedzi:
Napisałem (raczej prosty) TOUACExt dla SUDO dla CygWin , automatyzację skryptów powłoki przed wersją beta, która podchodzi do zachowania klasycznego
sudo
dla Linuksa:Instalacja wymaga skopiowania czterech
.sh
skryptów do jakiegoś katalogu ścieżki, utworzenia aliasu i tylko kilku dodatkowych kroków opisanych w wątku.Rezultaty : wpiszesz pojedynczy
sudo YourCommand
i otrzymasz wynik, bez martwienia się o resztę procesu.źródło
Jednym ze sposobów jest utworzenie fałszywego polecenia „sudo” o następującej treści:
Pozwoli
install.sh
to kontynuować, ponieważ znaleziono sudo.Nie podnosi to uprawnień, tak jak robi to prawdziwe sudo. Jeśli naprawdę potrzebujesz podwyższonych uprawnień, uruchom powłokę cygwin z konta z uprawnieniami administracyjnymi (XP) lub kliknij przycisk cygwin.bat i kliknij „uruchom jako administrator” (Vista, Win7)
źródło
bash
: dlaczego to działa? Strona nie mówi nic o$@
robieniu czegośsudo
podobnego. Zamiast tego są to tylko argumenty skryptu. I czy w takim przypadku cytaty wokół niego nie byłyby zbyteczne? W przeciwnym razie, jeśli to zrobiszsudo foo bar
, spróbuje wykonać"foo bar"
jako pojedyncze polecenie, które prawdopodobnie nie istnieje, biorąc pod uwagę ten irracjonalny strach przed spacjami w systemach typu UNIX."$@"
(gdy jest cytowany) działa inaczej niż"$*"
: rozwija się do osobnego słowa dla każdej zmiennej pozycyjnej. Przykład: Jeśli$1 == "foo bar"
i$2 == "baz"
, to"$@"
jest"foo bar" baz
- jedno słowo dla każdego parametru (w przeciwieństwie do tego"$*"
, co daje"foo bar baz"
jedno słowo). Patrz instrukcjabash
, sekcja Parametry , podsekcja Parametry specjalne . Efektem końcowym skryptu Peona jest to, że wykonuje on swoje argumenty dokładnie tak, jak zostały przekazane.sudo
część? Powyższy fragment nie robi nic zdalnie w tym kierunku, prawda?sudo
podnosiłby przywileje od śmiertelnych doroot
przed uruchomieniem polecenia. W Cygwin nie ma czegoś takiego, więc fałszywy skrypt Peona (który należy nazwaćsudo
) po prostu uruchamia polecenie bezpośrednio, nie zmieniając jego uprawnień. (Oznacza to, że może być konieczne uruchomienie./install.sh
jako Administrator.)runas
powinien działać, nie opiera się na UAC i sam monituje o hasło. Byłem po prostu zdezorientowany, dlaczego scenariusz w odpowiedzi najwyraźniej nie zrobił tego, co sugerowała nazwa, co, jak zakładam, było celem. Przepraszam za moją głupotę ;-)Odpowiedź znalazłem na liście dyskusyjnej cygwina . Aby uruchomić
command
z podwyższonymi uprawnieniami w Cygwin, poprzedź poleceniecygstart --action=runas
następująco:Otworzy się okno dialogowe Windows z prośbą o hasło administratora i uruchom polecenie, jeśli zostanie wprowadzone prawidłowe hasło.
Można to łatwo wykonać za pomocą skryptu, o ile
~/bin
znajduje się na twojej ścieżce:Testowany na 64-bitowym systemie Windows 8.
źródło
cygstart
metodą polega na tym, że działa ona tylko dla poleceń / programów Windows. Nie możesz tego zrobićsudo ls
. SUDO dla CygWin jest schludne, ale wciąż brakujesudo
w nim dobrej znajomości.sudo ls
musiałeś skorzystać z Cygwin?sudo
CygWin do uruchomienia dowolnego polecenia Windows lub CygWin. Jest to dla mnie bardzo przydatne. Ale bardziej praktyczną metodą, którą znalazłem, jest to opakowanie skryptu dla SUDO dla CygWin, które opracowałem: superuser.com/questions/741345/… (wciąż w wersji Beta, ale wydaje się, że działa). Dzięki niemu możesz wygodnie zamawiać takie rzeczysudo net start vncserver
./bin
i/usr/bin
odPATH
. Z powodzeniem wywołuje emacs:ShellExecute(NULL, "runas", "C:\cygwin64\bin\emacs-w32.exe", "(null)", "(null)", 1)
ale wtedy emacs nie może znaleźćls
np.M-x dired
Nawet po interaktywnym przywracaniu PATH za pomocą(setenv ...)
. Czy występuje tu problem z zaufanymi ścieżkami?Opierając się na odpowiedzi dotancohen, używam aliasu:
Działa jako urok programów zewnętrznych (ale nie wbudowanych w powłokę):
źródło
Sudo (Elevate) na Windows ™
Dużo pracuję nad wierszem poleceń w systemie Windows ™.
W samym Cygwin wierzę, że możesz uruchomić polecenie root
su -c /the/cmd
jak dla samego sudo w systemie plików Windows ™, podnosząc uprawnienia użytkownika z linii poleceń. Jeśli jesteś administratorem, będzie to dla ciebie świetne. W przeciwnym razie użyj run i zdobądź przepustkę administratora;).Teraz nie pamiętam, skąd mamy ten kod, ale oto on. Mam nadzieję, że to pomoże.
BTW, pakiet, którego używamy do kompilacji tego był
gcc-mingw32
.źródło
Nieznaczna poprawa fałszywego skryptu sudo Peona:
Ten skrypt po cichu usuwa wszystkie opcje przekazane do sudo i wykonuje polecenie (bez faktycznego podnoszenia uprawnień). Usunięcie opcji nieco poprawia kompatybilność. Bardziej kompletny skrypt opakowujący powinien analizować opcje w taki sam sposób, jak robi to sudo.
Zamiast próbować zastąpić sudo opakowaniem, które to robi
cygstart --action=runas "$@"
, wystarczy użyć tego prostego fałszywego opakowania sudo i uruchomić sam skrypt instalacyjny (lub cokolwiek, co próbujesz uruchomić, który używa sudo) z podwyższonymi uprawnieniami.źródło