Pseudo-Sudo no Cygwin / bash

0

Eu preciso do sudo para funcionar, bem, não para o sudo em si, mas uma forma de permitir que os comandos do sudo funcionem como descrito aqui .

Isso seria ótimo, mas as linhas de sudo têm argumentos extras, como:

sudo -u user bash -c 'uptime'

E se eu fosse usar o bash no link acima, eu simplesmente pegaria a saída

/usr/bin/sudo: line 3: -u: command not found

Existe alguma maneira em torno disso? Para fazê-lo funcionar a partir da citação, em vez de talvez -c.

    
por Marcus Hughes 09.11.2011 / 11:12

2 respostas

1

Se tiver certeza de que o comando enviado sempre será exatamente como

sudo -u user command...

então o seu falso script sudo pode simplesmente jogar fora seus dois primeiros argumentos:

#!/bin/bash
shift 2
exec "$@"

Caso contrário, você precisa fazer uma pequena análise de argumentos:

#!/bin/bash
while getopts :u: opt
do
  # normally you'd process options and arguments here,
  # but in this case just ignore them
done
shift $((OPTIND-1))  # throw out processed options and arguments
exec "$@"

getopts lê e retorna opções e argumentos da linha de comando, até que não haja mais. Você pode ler sobre isso no bash (1) ( man bash ) se você quiser saber mais sobre como processar os argumentos da linha de comando.

    
por 09.11.2011 / 11:26
0

Isto é o que eu usei para o sudo rodar o Ansible sob o babun:

#!/bin/bash
count=0

for var in "$@"
  do
    (( count++ ))
  done

shift $count
exec "$@"
    
por 25.04.2015 / 09:01