usermod + awk 잘못된 구문

usermod + awk 잘못된 구문

나는 특정 그룹에 사용자를 추가하는 명령(Solaris 서버)을 작성하려고 했습니다. 꽤 긴 명령이므로 여기에 전체 명령을 게시한 다음 분해하겠습니다.

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

내부명령은 현재 그룹의 쉼표로 구분된 목록을 컴파일하고 외부 명령은 -G 매개변수에서 이 목록을 가져옵니다.

둘 다그리고사용자 모드구문 오류(1번째 줄 근처에 있지만 한 줄만 있음)가 발생하지만 한 오류가 다른 오류로 인해 발생한 것 같습니다.

여기에 내가 놓친 눈에 띄는 구문 오류가 있습니까? 쉘 문제로 인해 발생할 수 있습니까? 면책 조항으로 일부 상위 수준의 텍스트 처리 문제로 인해 세미콜론 대신 && 구문을 사용하고 있지만 제 생각에는 실행에 영향을 미치지 않아야 한다고 생각합니다(테스트했습니다).

답변1

awkSolaris에서는 다르게 작동합니다.– 에서 사용 가능한 버전은 옵션을 /usr/bin지원하지 않습니다 -v. 사용nawkPOSIX와 유사한 버전을 원합니다.


두 번째 문제는 이미 알아차렸듯이 한 줄만 있다는 것입니다. 꼭 필요한 것이 아니라면 한 줄로 작성하려고 하지 마세요. 읽을 수 있는 명령은 수정하기가 더 쉽습니다. 명령을 구성 파일 어딘가에 넣어야 한다면 .sh대신 스크립트에 넣으세요.

$USER임시 변수로 사용하지 마십시오 . 많은 프로그램에서는 이 특정 변수에 다음이 포함될 것으로 예상합니다.당신의로그인 이름. 대신에 다음과 같은 것을 선택하십시오 $user.

/etc/group와 같이 이를 수행하는 도구가 있는 경우 구문 분석하지 마십시오 groups. (코드를 더 간단하게 만드는 것 외에도 로컬이 아닌 계정에서도 작동합니다.)

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

아니면 당신이 주장한다면

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

관련 정보