web-dev-qa-db-ja.com

bash:端末プロセスグループを設定できません(-1):デバイスの不適切なioctl

Ubuntu 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

7
sprocket12
  • su - usernameは、usernameのログインシェルをインタラクティブシェルとして実行します。

  • su username command argumentsは、アカウントusernameの下でcommand argumentsnon-interactivelyを実行します。

コマンドsu lfs - -c "source ~/.bash_profile"は、ユーザーlfsnon-interactivelyとして- -c "source ~/.bash_profile"を実行することを意味します。シェルはオプション-を確認し、対話型ログインシェルとして実行して端末を初期化しようとしていますが、suが制御端末から子プロセスを切断しました。

つまり、-は、間違った場所に配置されているか、誤っています。

より長い議論については、serverfaultの 同じ質問 を実際に参照してください。

5
AlexP