Como não há comando sudo no Cygwin , os scripts que eu quero executar falham
./install.sh: line N: sudo: command not found
Qual é a maneira padrão de contornar isso? Editando os scripts para remover sudo
? Obtendo alguma sudo
ferramenta semelhante ao Windows?
windows
command-line
cygwin
Jason Sundram
fonte
fonte
Respostas:
Eu escrevi o (bastante simples) TOUACExt for SUDO para CygWin , uma automação de script de shell pré-beta que aborda o comportamento do clássico
sudo
para Linux:A instalação requer a cópia dos quatro
.sh
scripts para algum diretório de caminho, criando um alias e apenas mais algumas etapas detalhadas no encadeamento.Os resultados : você digita um único
sudo YourCommand
e obtém a saída dele, sem ter que se preocupar com o resto do processo.fonte
Uma maneira é criar um comando "sudo" falso com o seguinte conteúdo:
Isso permitirá
install.sh
que continue, porque o sudo foi encontrado.Isso não eleva privilégios como o real sudo. Se você realmente precisa de privilégios elevados, inicie o cygwin shell com uma conta com privilégios administrativos (XP) ou clique com o botão direito do mouse em cygwin.bat e "execute como administrador" (Vista, Win7)
fonte
bash
: Por que isso funciona? A página de manual não diz nada sobre como$@
fazer algosudo
parecido. Em vez disso, são apenas todos os argumentos para o script. E as aspas a seu redor não seriam supérfluas nesse caso? Caso contrário, se você fizer umsudo foo bar
, ele tentará executar"foo bar"
como um único comando, o que provavelmente não existe, devido ao medo irracional de espaços em sistemas do tipo UNIX."$@"
(quando aspas duplas) funciona de forma diferente de"$*"
: se expande para uma palavra separada para cada variável posicional. Exemplo: Se$1 == "foo bar"
e$2 == "baz"
, então"$@"
é"foo bar" baz
- uma palavra para cada parâmetro (diferente de"$*"
, que resulta em"foo bar baz"
uma palavra). Consulte o manual dabash
seção Parâmetros , subseção Parâmetros especiais . O resultado final do script de Peon é que ele executa seus argumentos exatamente como foram aprovados.sudo
parte? O snippet acima não faz nada remotamente nessa direção, certo?sudo
aumentaria os privilégios de mortal pararoot
antes de executar o comando. No Cygwin, não existe isso, então o script falso do Peon (que você deve nomearsudo
) apenas executa o comando diretamente sem alterar seus privilégios. (Isto significa que você pode precisar executar./install.sh
como administrador.)runas
deve funcionar, não depende do UAC e solicita uma senha por si só. Fiquei confuso por que o script na resposta aparentemente não fez o que o nome implicava, que eu assumi ser o objetivo. Desculpem a minha estupidez ;-)Encontrei a resposta na lista de e-mails do cygwin . Para executar
command
com privilégios elevados no Cygwin, preceda o comando dacygstart --action=runas
seguinte maneira:Isso abrirá uma caixa de diálogo do Windows solicitando a senha de administrador e execute o comando se a senha apropriada for digitada.
Isso é facilmente script, contanto que
~/bin
esteja no seu caminho:Testado no Windows 8 de 64 bits.
fonte
cygstart
método é que ele funciona apenas para comandos / programas do Windows. Você não pode fazersudo ls
. O SUDO para CygWin é legal, mas ainda não possui um bomsudo
comando.sudo ls
no Cygwin?sudo
CygWin para executar qualquer comando do Windows ou CygWin. É bem útil para mim. Mas o método mais prático que encontrei é este wrapper de script para SUDO para CygWin que eu desenvolvi: superuser.com/questions/741345/… (ainda na versão beta, mas parece funcionar). Com ele, você pode encomendar confortavelmente coisas do tiposudo net start vncserver
./bin
e sai/usr/bin
doPATH
. Invoca com êxito o emacs:ShellExecute(NULL, "runas", "C:\cygwin64\bin\emacs-w32.exe", "(null)", "(null)", 1)
mas, em seguida, o emacs não pode encontrar,ls
por exemploM-x dired
, mesmo depois de restaurar interativamente o PATH usando(setenv ...)
. Existe um problema de caminhos confiáveis aqui?Com base na resposta de dotancohen, estou usando um alias:
Funciona como um encanto para programas externos (embora não sejam incorporados ao shell):
fonte
Sudo (Elevate) para Windows ™
Eu trabalho muito na linha de comando no Windows ™.
No próprio Cygwin, acredito que você pode executar um comando raiz com o
su -c /the/cmd
próprio sudo no sistema de arquivos do Windows ™, elevando as permissões do usuário na linha de comando. Se você é um administrador, isso funcionará muito bem para você. Caso contrário, use runas e obtenha o passe do administrador;).Agora não me lembro de onde conseguimos esse código, mas aqui está ele. Espero que ajude.
BTW, o pacote que usamos para compilar isso foi
gcc-mingw32
.fonte
Uma ligeira melhoria no script de sudo falso de Peon :
Este script descarta silenciosamente todas as opções passadas para o sudo e executa o comando (sem realmente elevar os privilégios). Descartar as opções melhora um pouco a compatibilidade. Um script de wrapper mais completo deve analisar as opções da mesma maneira que o sudo.
Em vez de tentar substituir o sudo por um invólucro
cygstart --action=runas "$@"
, basta usar esse invólucro falso e simples e executar o próprio script de instalação (ou o que você estiver tentando executar usando o sudo) com privilégios elevados.fonte