Parce qu'il n'y a pas de commande sudo dans Cygwin , les scripts que je veux exécuter échouent
./install.sh: line N: sudo: command not found
Quel est le moyen standard pour contourner cela? Modification des scripts à supprimer sudo
? Obtenir un sudo
outil similaire à Windows?
windows
command-line
cygwin
Jason Sundram
la source
la source
Réponses:
J'ai écrit TOUACExt pour SUDO (plutôt simple) pour CygWin , une automatisation de script shell pré-bêta qui aborde le comportement de classic
sudo
sous Linux:L'installation nécessite la copie des quatre
.sh
scripts dans un répertoire de chemin, la création d'un alias et quelques étapes supplémentaires détaillées dans le fil de discussion.Le résultat : vous tapez un simple
sudo YourCommand
et vous en obtenez le résultat sans avoir à vous soucier du reste du processus.la source
Une solution consiste à créer une fausse commande "sudo" avec le contenu suivant:
Cela permettra
install.sh
à continuer, car sudo est trouvé.Cela n'élève pas les privilèges comme le fait le vrai sudo. Si vous avez vraiment besoin de privilèges élevés, démarrez cygwin shell à partir d'un compte doté de privilèges d'administrateur (XP) ou cliquez avec le bouton droit de la souris sur cygwin.bat et exécutez-le en tant qu'administrateur (Vista, Win7).
la source
bash
: pourquoi cela fonctionne-t-il? La page de manuel ne dit rien sur le$@
fait de faire quoi que ce soitsudo
. Au lieu de cela, ce ne sont que tous les arguments du script. Et les citations autour de cela ne seraient-elles pas superflues dans ce cas? Sinon, si vous le faites,sudo foo bar
il essaie de s'exécuter en"foo bar"
tant que commande unique, ce qui n'existe probablement pas étant donné la peur irrationnelle des espaces sur les systèmes de type UNIX."$@"
(lorsqu'il est cité entre guillemets) fonctionne différemment de"$*"
: il se développe en un mot distinct pour chaque variable de position. Exemple: Si$1 == "foo bar"
et$2 == "baz"
, alors"$@"
est"foo bar" baz
- un mot pour chaque paramètre (contrairement à"$*"
, ce qui donne"foo bar baz"
un mot). Voir le manuel debash
, section Paramètres , sous- section Paramètres spéciaux . Le résultat final du script de Peon est qu'il exécute ses arguments exactement tels qu'ils ont été passés.sudo
pièce? L'extrait ci-dessus ne fait rien à distance dans cette direction, non?sudo
lève les privilèges de mortal àroot
avant d'exécuter la commande. Dans Cygwin, cela n'existe pas, aussi le faux script de Peon (que vous êtes censé nommersudo
) exécute simplement la commande directement sans modifier ses privilèges. (Cela signifie que vous devrez peut-être exécuter en./install.sh
tant qu'administrateur.)runas
devrait fonctionner, il ne dépend pas de l'UAC et demande un mot de passe par lui-même. J'étais juste confus pourquoi le script dans la réponse apparemment ne faisait pas ce que le nom sous-entendait que je supposais être le but. Désolé pour ma stupidité ;-)J'ai trouvé la réponse sur la liste de diffusion de cygwin . Pour exécuter
command
avec des privilèges élevés dans Cygwin, faites précéder la commande de la manièrecygstart --action=runas
suivante:Cela ouvrira une boîte de dialogue Windows demandant le mot de passe administrateur et exécutera la commande si le mot de passe correct est entré.
Ceci est facilement scripté, tant qu'il
~/bin
est dans votre chemin:Testé sous Windows 8 64 bits.
la source
cygstart
méthode est qu’elle ne fonctionne que pour les commandes / programmes Windows. Tu ne peux pas fairesudo ls
. SUDO pour CygWin est soigné, mais manque toujours desudo
maîtrise.sudo ls
Cygwin?sudo
pour CygWin pour exécuter n’importe quelle commande Windows ou CygWin. Ça m'est très utile. Mais la méthode la plus pratique que j'ai trouvée est cette enveloppe de script pour SUDO pour CygWin que j'ai développée: superuser.com/questions/741345/… (toujours en version bêta, mais semble fonctionner). Avec cela, vous pouvez facilement commander des choses commesudo net start vncserver
./bin
et/usr/bin
de laPATH
. Il appelle avec succès emacs:ShellExecute(NULL, "runas", "C:\cygwin64\bin\emacs-w32.exe", "(null)", "(null)", 1)
mais emacs ne peut pas rechercher,ls
par exempleM-x dired
, même après la restauration interactive de PATH à l'aide de(setenv ...)
. Existe-t-il un problème de chemins de confiance ici?En me basant sur la réponse de dotancohen, j'utilise un alias:
Fonctionne comme un charme pour les programmes externes (pas les shell intégrés):
la source
Sudo (Elevate) pour Windows ™
Je travaille beaucoup sur la ligne de commande sous Windows ™.
Dans Cygwin lui-même, je pense que vous pouvez exécuter une commande racine avec
su -c /the/cmd
comme pour sudo lui-même dans le système de fichiers Windows ™ en élevant les autorisations de l'utilisateur depuis la ligne de commande. Si vous êtes un administrateur, cela fonctionnera très bien pour vous. Sinon, utilisez les runas et obtenez le passe administrateur;).Maintenant, je ne me souviens plus où nous avons obtenu ce code, mais le voici. J'espère que ça aide.
BTW, le paquet que nous avons utilisé pour compiler était
gcc-mingw32
.la source
Une légère amélioration sur le faux script sudo de Peon :
Ce script supprime en silence toutes les options passées à sudo et exécute la commande (sans élever réellement les privilèges). Supprimer les options améliore quelque peu la compatibilité. Un script d'encapsulation plus complet devrait en réalité analyser les options de la même façon que sudo.
Au lieu d'essayer de remplacer sudo par un wrapper
cygstart --action=runas "$@"
, utilisez simplement ce faux wrapper sudo et exécutez votre script d'installation lui-même (ou tout ce que vous essayez d'utiliser qui utilise sudo) avec des privilèges élevés.la source