스크립트에서 작업그룹을 변경하고 싶어요. 그래서 newgrp test_grp1
대본에 한 줄을 썼습니다. 하지만 이 줄을 실행하면 내 스크립트가 자동으로 종료됩니다. 이 문제를 극복할 수 있는 해결책이 있나요?
#/bin/ksh
...
newgrp test_grp1
...
노트:저는 Unix AIX 운영 체제를 사용하고 있습니다.
답변1
newgrp
지정한 그룹을 사용하여 하위 쉘을 시작합니다. 따라서 스크립트의 이 줄은 하위 쉘이 완료될 때까지 완료되지 않습니다.
또는 를 사용하는 경우 newgrp
에도 처리 방법이 다릅니다 . 다시는 bash
ksh
ksh
exec /usr/bin/newgrp [group]
exec
newgrp
돌아오지 마세요. (일부 문서 참조여기.)
반환을 원하고 변경된 그룹 ID를 사용하여 해당 하위 쉘에서 명령을 실행하려는 경우 리디렉션을 사용할 수 있습니다.
예를 들어:
#!/bin/ksh
echo "Before newgrp"
/usr/bin/newgrp users <<EONG
echo "hello from within newgrp"
id
EONG
echo "After newgrp"
참고: 에서 /usr/bin/newgrp
암시적인 것을 방지하려면 명시적으로 호출하세요 . 스크립트의 마지막 명령은 원래 그룹 ID를 사용하여 원래 셸에서 실행됩니다.exec
ksh
답변2
프로세스가 시작되면 추가 권한을 얻을 수 없습니다. 따라서 스크립트 중간에 그룹 멤버십을 얻을 수 없습니다. 추가 그룹 멤버십을 사용하여 전체 스크립트를 실행할 수 있습니다.
newgrp test_grp1
/path/to/script
중간 스크립트의 실제 GID는 변경할 수 없습니다. 꼭 필요한 경우 Perl과 같이 작동하는 언어로 전환하세요. 하지만 실제 GID를 변경할 필요는 거의 없습니다. 실제로는 중요하지 않기 때문입니다. 일반적으로 가끔 호출 chgrp
(먼저 그룹 권한 없이 파일을 생성한 다음 실행하고 chgrp
그룹 권한을 추가하면 충분합니다. 그룹 권한으로 파일을 생성하는 경우 경쟁 조건이 있습니다. 그룹의 첫 번째 사용자가 파일을 열 수 있습니다. 시간을 갖고 파일을 실행하기 전에 chgrp
).