J'ai essayé d'écrire une commande (serveur Solaris) qui ajoute un utilisateur à un groupe spécifique. C'est une commande assez longue donc je vais poster la commande entière ici et ensuite la décomposer.
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
La commande inner awk compile une liste de groupes actuels délimitée par des virgules et la commande externe prend cette liste dans le paramètre -G.
Les deux awk et usermod me donnent des erreurs de syntaxe (près de la ligne 1, mais il n'y a qu'une seule ligne), mais je dois est causée par l'autre le sentiment d' une erreur.
Y a-t-il des erreurs de syntaxe flagrantes ici qui me manquent? Cela pourrait-il être causé par un problème de shell? En tant que clause de non-responsabilité, j'utilise la construction && au lieu d'un point-virgule en raison de problèmes de traitement de texte de niveau supérieur, mais cela ne devrait pas affecter l'exécution, à mon avis (je l'ai testée).
la source
Réponses:
awk
fonctionne différemment sous Solaris - la version disponible dans/usr/bin
ne prend pas en charge cette-v
option. Utilisernawk
pour une version plus semblable à POSIX.Le deuxième problème est que, comme vous l'avez déjà remarqué, il n'y a qu'une seule ligne. N'essayez pas d'écrire une ligne si ce n'est absolument nécessaire; les commandes lisibles sont plus faciles à corriger. Si vous devez placer la commande dans un fichier de configuration, placez-la dans un
.sh
script.Ne pas utiliser
$USER
comme variable temporaire; de nombreux programmes s'attendent à ce que cette variable contienne votre nom de connexion. Choisissez quelque chose comme à la$user
place.Ne pas analyser
/etc/group
quand il existe des outils qui le font pour vous, tels quegroups
. (En plus de simplifier le code, ils fonctionnent également avec des comptes non locaux.)ou si vous insistez
la source
/usr/local/bin/add-user-to-group.sh
est une commande d' une ligne aussi bien :) Quoi qu'il en soit, je l'ai fait inclure une version d' une ligne que vous pouvez utiliser, au fond de mon poste.