usermod + awk ungültige Syntax

usermod + awk ungültige Syntax

Ich habe versucht, einen Befehl (Solaris-Server) zu schreiben, der einen Benutzer zu einer bestimmten Gruppe hinzufügt. Es ist ein ziemlich langer Befehl, deshalb werde ich den gesamten Befehl hier posten und ihn dann aufschlüsseln.

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

Das InnereawkDer Befehl kompiliert eine durch Kommas getrennte Liste der aktuellen Gruppen und der äußere Befehl übernimmt diese Liste im Parameter -G.

BeideawkUndBenutzermodgeben mir Syntaxfehler (in der Nähe von Zeile 1, aber es gibt nur eine Zeile), aber ich habe das Gefühl, dass ein Fehler durch den anderen verursacht wird.

Gibt es hier offensichtliche Syntaxfehler, die ich übersehen habe? Könnte dies durch ein Shell-Problem verursacht werden? Als Haftungsausschluss verwende ich aufgrund einiger Probleme bei der Textverarbeitung auf höherer Ebene die &&-Konstruktion anstelle eines Semikolons, aber meiner Meinung nach sollte dies die Ausführung nicht beeinträchtigen (ich habe es getestet).

Antwort1

awkfunktioniert unter Solaris anders– Die in verfügbare Version /usr/binunterstützt die -vOption nicht. Verwenden Sienawkfür eine POSIX-ähnlichere Version.


Das zweite Problem ist, dass es, wie Sie bereits bemerkt haben, nur eine Zeile gibt. Versuchen Sie nicht, Einzeiler zu schreiben, wenn es nicht unbedingt nötig ist; lesbare Befehle lassen sich leichter korrigieren. Wenn Sie den Befehl irgendwo in eine Konfigurationsdatei schreiben müssen, schreiben Sie ihn .shstattdessen in ein Skript.

Nicht $USERals temporäre Variable verwenden. Viele Programme erwarten, dass diese spezielle Variable Folgendes enthält:deinAnmeldename. Wählen Sie $userstattdessen etwas wie.

Führen Sie keine Analyse durch /etc/group, wenn es Tools gibt, die dies für Sie erledigen, wie z. B. groups. (Sie vereinfachen nicht nur den Code, sondern funktionieren auch mit nicht lokalen Konten.)

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

oder wenn Sie darauf bestehen

user=myUser && sudo usermod -G "$(groups "$user" | sed "y/ /,/"),myGroup" "$user"

verwandte Informationen