문맥:

문맥:

우분투 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 - usernameusername로그인 셸을 대화형 셸로 실행합니다.

  • 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 ...

관련 정보