Weil es keine gibt sudo befehl in Cygwin , Skripte, die ich ausführen möchte, schlagen fehl
./install.sh: line N: sudo: command not found
Was ist die Standardmethode, um das zu umgehen? Bearbeiten der zu entfernenden Skripte sudo
? Einige bekommen sudo
-ähnliches Tool für Windows?
windows
command-line
cygwin
Jason Sundram
quelle
quelle
Antworten:
Ich habe das geschrieben (eher simpel) TOUACExt zum SUDO für CygWin , eine Pre-Beta-Shell-Skript-Automatisierung, die sich dem nähert Verhalten der klassischen
sudo
für Linux:Installation erfordert das Kopieren der vier
.sh
Skripte zu einem Pfadverzeichnis, erstellen einen Alias und nur ein paar weitere Schritte, die im Thread beschrieben werden.Die Ergebnisse : Sie geben eine einzelne ein
sudo YourCommand
und Sie erhalten die Ausgabe, ohne sich um den Rest des Prozesses kümmern zu müssen.quelle
Eine Möglichkeit besteht darin, einen falschen "sudo" -Befehl mit folgendem Inhalt zu erstellen:
Dies ermöglicht die
install.sh
um fortzufahren, weil sudo gefunden wird.Dies erhöht nicht die Rechte, wie dies bei echtem Sudo der Fall ist. Wenn Sie wirklich erweiterte Rechte benötigen, starten Sie cygwin shell mit einem Konto mit Administratorrechten (XP) oder klicken Sie mit der rechten Maustaste auf cygwin.bat und "Als Administrator ausführen" (Vista, Win7)
quelle
bash
: Warum funktioniert das? Die Manpage sagt nichts darüber$@
irgendetwas tunsudo
-mögen. Stattdessen handelt es sich nur um Argumente für das Skript. Und wären die Anführungszeichen in diesem Fall nicht überflüssig? Andernfalls, wenn Sie a tun würdensudo foo bar
dann versucht es auszuführen"foo bar"
als einzelner Befehl, der angesichts der irrationalen Angst vor Leerzeichen auf UNIX-ähnlichen Systemen wahrscheinlich nicht existiert."$@"
(wenn in Anführungszeichen gesetzt) funktioniert anders als"$*"
: es erweitert sich zu einem trennen Wort für jede Positionsvariable. Beispiel: Ob$1 == "foo bar"
und$2 == "baz"
, dann"$@"
ist"foo bar" baz
- ein Wort für jeden Parameter (im Gegensatz zu"$*"
, was in ... resultiert"foo bar baz"
als ein Wort). Siehe Handbuch vonbash
, Sektion Parameter Unterabschnitt Spezielle Parameter . Das Endergebnis von Peons Skript ist, dass es seine Argumente genau so ausführt, wie sie übergeben wurden.sudo
Teil hereinkommen? Das obige Snippet tut nichts aus der Ferne in diese Richtung, oder?sudo
würde Privilegien von sterblichen erhöhenroot
bevor Sie den Befehl ausführen. In Cygwin gibt es so etwas nicht, also Peons gefälschtes Drehbuch (das du benennen sollst)sudo
) führt den Befehl nur direkt aus, ohne seine Berechtigungen zu ändern. (Dies bedeutet, dass Sie möglicherweise ausführen müssen./install.sh
als Administrator.)runas
Sollte dies funktionieren, ist es nicht auf die Benutzerkontensteuerung angewiesen und fordert von sich aus zur Eingabe eines Kennworts auf. Ich war nur verwirrt, warum das Skript in der Antwort anscheinend nicht das tat, was der Name andeutete, von dem ich annahm, dass es das Ziel war. Entschuldigung für meine Dummheit ;-)Ich fand die Antwort auf die cygwin mailing liste . Zu rennen
command
mit erhöhten Rechten in Cygwin, stellen Sie dem Befehl mitcygstart --action=runas
so was:Daraufhin wird ein Windows-Dialogfeld geöffnet, in dem Sie nach dem Administratorkennwort gefragt werden. Führen Sie den Befehl aus, wenn das richtige Kennwort eingegeben wurde.
Dies ist leicht zu skripten, solange
~/bin
ist auf deinem Weg:Getestet unter 64-Bit Windows 8.
quelle
cygstart
Methode ist, dass es nur für Windows-Befehle / Programme funktioniert. Du kannst nicht tunsudo ls
. SUDO für CygWin ist ordentlich, aber es fehlen noch einige gutesudo
Befehl drin.sudo ls
in Cygwin?sudo
für CygWin, um einen Windows- oder CygWin-Befehl auszuführen. Es ist sehr nützlich für mich. Aber die praktischere Methode, die ich gefunden habe, ist dieser Skript-Wrapper für SUDO für CygWin, den ich entwickelt habe: superuser.com/questions/741345/… (noch in der Beta, scheint aber zu funktionieren). Damit können Sie bequem Dinge wie bestellensudo net start vncserver
./bin
und/usr/bin
von demPATH
. Es ruft erfolgreich emacs auf:ShellExecute(NULL, "runas", "C:\cygwin64\bin\emacs-w32.exe", "(null)", "(null)", 1)
aber dann kann emacs nicht findenls
für z.M-x dired
, auch nach interaktiver Wiederherstellung des PATH mit(setenv ...)
. Gibt es hier ein Problem mit vertrauenswürdigen Pfaden?Aufbauend auf Dotancohens Antwort Ich verwende einen Alias:
Funktioniert wie ein Zauber für externe Programme (allerdings nicht für Shell-Einbauten):
quelle
Sudo (Elevate) für Windows ™
Ich arbeite viel an der Befehlszeile in Windows ™.
In Cygwin selbst glaube ich, dass Sie einen root-Befehl mit ausführen können
su -c /the/cmd
Was Sudo selbst innerhalb des Windows ™ -Dateisystems anbelangt, indem die Berechtigungen des Benutzers über die Befehlszeile erhöht werden. Wenn Sie Administrator sind, funktioniert dies hervorragend für Sie. Ansonsten benutze runas und hol dir den Admin-Pass;).Jetzt kann ich mich nicht erinnern, woher wir diesen Code haben, aber hier ist er. Ich hoffe, es hilft.
Übrigens war das Paket, mit dem wir das kompilieren
gcc-mingw32
.quelle
Eine leichte Verbesserung gegenüber Peon's gefälschtes Sudo Skript:
Dieses Skript löscht im Hintergrund alle an sudo übergebenen Optionen und führt den Befehl aus (ohne die Berechtigungen tatsächlich zu erhöhen). Das Löschen der Optionen verbessert die Kompatibilität etwas. Ein vollständigeres Wrapper-Skript sollte Optionen genau wie sudo analysieren.
Anstatt zu versuchen, sudo durch einen Wrapper zu ersetzen, der dies tut
cygstart --action=runas "$@"
Verwenden Sie einfach diese einfache gefälschtes Sudo Erstellen Sie einen Wrapper und führen Sie das Installationsskript selbst (oder was auch immer Sie ausführen möchten, das sudo verwendet) mit erhöhten Rechten aus.quelle