명령을 실행하고 내가 구성원으로 속한 특정 그룹 이름을 사용하여 실행하기를 원하지만 해당 그룹은 내 기본 그룹이 아닙니다. 따라서 생성된 모든 파일은 이 그룹에 속하게 됩니다. 그런 명령이 있나요?
그리고 나중에 수정하세요 chgrp
.
그러다가 발견한 newgrp
(각 로그인 세션의 기본 기본 GID 변경), 그러나 이는 서브쉘을 생성합니다. 따라서 oneliner가 newgroup <groupname> && cmd
작동하지 않습니다. 그리고 나중에 쉘을 닫아야 합니다.
두 접근 방식 모두 오류가 발생하기 쉬운 것 같습니다.
답변1
이 명령은 sg
이러한 목적으로 사용될 수 있습니다.
인용하다man sg
sg [-] [group [-c ] command]
이 sg
명령은 명령처럼 작동 newgrp
하지만 명령을 받아들입니다. 이 명령은 쉘을 사용하여 실행됩니다 /bin/sh
. 를 실행할 가능성이 있는 대부분의 쉘에서는 sg
여러 단어 명령을 따옴표로 묶어야 합니다. newgrp
와 사이의 또 다른 차이점은 sg
일부 쉘은
newgrp
자신이 만든 쉘의 새 인스턴스로 자신을 대체하는 특별한 작업을 수행한다는 것입니다 newgrp
. 의 경우에는 이런 일이 발생하지 않으므로 명령을 sg
종료하면
sg
이전 그룹 ID로 돌아갑니다.
bash
스크립트에서 여러 명령의 GID를 변경하려면 스크립트를 두 부분으로 분할하고 매개변수를 사용하여 두 번째 스크립트를 호출하거나 끝없는 재귀를 피하기 위해 sg
스크립트가 일부 매개변수를 사용하여 자체 호출하도록 합니다 .sg
Python에서 setgit
시스템 호출을 사용하는 다른 방법이 있을 수 있습니다.