우분투 14.04에서 "lfs" 사용자를 사용하여 소스 명령을 실행해 보았고 다음을 얻었습니다.
root@linux:~/lfs# su lfs - -c "source ~/.bash_profile"
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
어떤 아이디어가 있나요?
배경 정보: 저는 LFS 책을 따라가며 그것으로 스크립트를 만들고 있습니다. 따라서 sudo로 실행하는 스크립트에서 이 부분에 도달하면 lfs 사용자와 해당 .bashrc 및 .bashprofile을 생성한 후 다음과 같을 것 같습니다. 로드하세요.
문맥:
echo "info: create 'lfs' group and user..."
groupadd -f lfs
id -u lfs &>/dev/null || useradd -s /bin/bash -g lfs -m -k /dev/null lfs
passwd -d -q lfs
echo "info: make 'lfs' own the 'tools' and 'sources' directories..."
chown lfs $LFS/tools
chown lfs $LFS/sources
echo "info: creating a clean '.bash_profile' as user 'lfs'..."
su lfs - -c "cat > ~/.bash_profile << \"EOF\"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF"
echo "info: creating a clean '.bashrc' as user 'lfs'..."
su lfs - -c "cat > ~/.bashrc << \"EOF\"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH
EOF"
su lfs - -c "source ~/.bash_profile"
편집하다:
누군가 내 구문이 올바르지 않다고 제안했습니다. 저는 지금 Linux 상자를 사용하고 있지 않으므로 기회가 생기면 다른 구문을 시도해 보겠습니다. 그러나 자세한 내용은 여기 답변에서 구문을 얻었습니다. https://serverfault.com/questions/411307/cannot-set-terminal-process-group-during-su-to-another-user-as-login-shell
답변1
su - username
username
로그인 셸을 대화형 셸로 실행합니다.su username command arguments
달리다command arguments
비대화형으로계정 아래username
.
귀하의 명령은 사용자로 실행을 su lfs - -c "source ~/.bash_profile"
의미합니다- -c "source ~/.bash_profile"
lfs
비대화형으로. 이제 쉘은 해당 옵션을 보고 -
대화형 로그인 쉘로 실행하고 터미널을 초기화하려고 시도하지만 su
하위 프로세스가 제어 터미널에서 연결이 끊어졌다고 말합니다.
간단히 말해서, -
잘못된 위치에 있거나 잘못되었습니다.
더 자세한 내용은 다음을 참조하세요.같은 질문서버 장애시.
답변2
Docker 컨테이너 내부에서 사용자를 전환할 때도 동일한 문제에 직면했습니다. 추가해서 해결했어요--pty (-P)세션에 대한 의사 터미널을 생성하고 TIOCSTI ioctl 터미널 주입을 방지하는 옵션입니다. 따라서 다음 명령으로 문제를 해결해야 합니다.
su lfs -l -P -c ...