usermod + awk sintaxe inválida

usermod + awk sintaxe inválida

Tenho tentado escrever um comando (servidor Solaris) que adicione 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 interiorestranhoO comando compila uma lista delimitada por vírgulas dos grupos atuais e o comando externo leva essa lista no parâmetro -G.

Ambosestranhoemod de usuárioestã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 pelo outro.

Há algum erro de sintaxe gritante aqui que estou perdendo? Isso pode ser causado por um problema de shell? Como isenção de responsabilidade, estou usando a construção && em vez de 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).

Responder1

awkfunciona de maneira diferente no Solaris– a versão disponível em /usr/binnão suporta a -vopção. Usarnawkpara uma versão mais parecida com POSIX.


O segundo problema é que, como você já percebeu, só existe uma linha. Não tente escrever frases curtas se não for absolutamente necessário; comandos legíveis são mais fáceis de corrigir. Se você precisar colocar o comando em um arquivo de configuração em algum lugar – coloque-o em um .shscript.

Não use $USERcomo variável temporária; muitos programas esperam que esta variável específica contenhaseuNome de acesso. Escolha algo parecido $user.

Não analise /etc/groupquando houver ferramentas que façam isso por você, como groups. (Além de simplificar o código, eles também funcionam 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"

informação relacionada