Linuxシェルプロンプトbash:このシェルにはジョブ制御がありません



Linux Shell Prompt Bash



シェルから別のttyで実行されているシェルを起動すると、このプロンプトが表示されます。最も一般的には、シェルは標準入力および出力として/ dev / consoleを直接使用します。たとえば、gentoo、archはハードディスクを使用してDafaをインストールしますが、ハードディスクが見つからないため、自動的にシェルが起動します。このシェルはジョブ制御ではありません。

理由としては、内容が多いので、ここでは詳しく分析したくありません。詳細を知りたい場合は、ご覧くださいAUPE(これはUNIX環境の高度なプログラミングと呼ばれる中国語のUNIX環境での高度なプログラミングの本英語のフルネームです)それでおしまい。一般的な理由は、セッションリーダーが端末デバイスを開こうとしたときに、リーダーが端末を制御しない場合、端末デバイスが自動的にセッションリーダーの制御端末になるためです。これを知っていると、なぜこのプロンプトが表示されるのかを理解するのは難しくありません。これは、シェルが制御端末を検出していないことを意味します。

解決策は簡単です。agettyを使用してシェルを呼び出します。 Agettyは新しいセッションを作成します。当然、制御端末はありません。したがって、当然、agettyによって開かれたttyは自動的にその制御端末になり、agettyによって呼び出されたシェルはこれを継承します。

次に例を示します。

#!/bin/sh TMPNAME=`mktemp /tmp/bbsh.XXX` echo '#!/bin/sh' > $TMPNAME echo 'exec /bin/sh' >> $TMPNAME chmod +x $TMPNAME #Please make sure that tty8 is not being used by other programs /sbin/agetty -l /tmp/bbsh 38400 tty8 linux rm $TMPNAME

スクリプトを実行した後、agettyがtty8で実行されます。ログイン名を自由に入力してください。Enterキーを押すと、シェルが表示されます。このシェルはジョブ制御機能を備えています。したがって、より優れたミニLinuxを構築できます。