usermod + sintaxe inválida do awk

0

Eu tenho tentado escrever um comando (servidor Solaris) que adiciona um usuário a um grupo específico. É um comando bem longo, então vou postar o comando inteiro aqui e depois dividi-lo.

USER=myUser && sudo /usr/sbin/usermod -G 'awk -v delim="," -F: '/[:,]'$USER'/ { groups = groups $1 delim; } END { groups = groups "myGroup"; print groups}' /etc/group' myUser

O comando awk interno compila uma lista delimitada por vírgulas dos grupos atuais e o comando outer pega essa lista no parâmetro -G.

Ambos awk e usermod estão me dando erros de sintaxe (perto da linha 1, mas há apenas uma linha), mas tenho a sensação de que um erro é causado pela outra .

Há algum erro de sintaxe flagrante aqui que está faltando? Isso pode ser causado por um problema de shell? Como aviso legal, estou usando o & & construir em vez de um ponto e vírgula devido a alguns problemas de processamento de texto de nível superior, mas isso não deve afetar a execução, na minha opinião (eu testei).

    
por Mark 26.01.2012 / 23:25

1 resposta

2

awk funciona de maneira diferente no Solaris - a versão disponível em /usr/bin não suporta a opção -v . Use nawk para uma versão mais parecida com POSIX.

O segundo problema é que, como você já percebeu, há apenas uma linha. Não tente escrever one-liners se não for absolutamente necessário; comandos legíveis são mais fáceis de corrigir. Se você tiver que colocar o comando em um arquivo de configuração em algum lugar - coloque-o em um script .sh .

Não use $USER como uma variável temporária; muitos programas esperam que essa variável específica contenha o nome de login do seu . Escolha algo como $user .

Não analise /etc/group quando houver ferramentas que fazem isso para você, como groups . (Além de tornar o código mais simples, eles também trabalham com contas não locais.)

#!/bin/sh
user=myUser
group=myGroup
oldgroups=$(groups "$user" | sed "y/ /,/")
usermod -G "$oldgroups,$group" "$user"

ou se você insistir

user=myUser && sudo usermod -G "$(groups "$user" | sed "y/ /,/"),myGroup" "$user"
    
por 26.01.2012 / 23:50