web-dev-qa-db-ja.com

inittabから指定されたディレクトリでshを開始します

私は現在、組み込みLinuxシステムに取り組んでいます。他の製品と同様にするには、起動時に指定されたディレクトリでシェルを起動し、シリアルポートを使用してアクセスできるようにする必要があります。

そのために、inittab-scriptに次の行があります。

::respawn:-/bin/sh

これはこれまでのところ機能していますが、シェルが/ mnt/flashではなく/のpwdで起動するだけです。

私が思いつく唯一の方法は、/ bin/shを開始せず、代わりに次のようなスクリプトを作成することです。

#!/bin/sh
cd /mnt/flash
/bin/sh

2番目のスクリプトなしでinittabでインラインでそれを行う方法はありますか?

編集:これをログインスクリプトにする必要があります。これは、-の前の/bin/shが意味するものです。 ::respawn:/bin/sh -c "cd /mnt/flash;exec /bin/sh"を実行しただけでは、期待どおりにフォルダが変更されますが、ログインシェルが取得されないため、他の問題が発生します。

::respawn:-/bin/sh -c "cd /mnt/flash;exec /bin/shで実行すると、次のエラーが発生します。

/bin/sh: exec: line 1: -/bin/sh: not found
4
Dakkaron

シェルにいくつかの引数を指定して、開始が少し異なるようにすることができます。例えば。

/bin/sh -c "cd /mnt/flash;exec /bin/sh"

次の文字列でコマンドを実行する-cで始まります。

最初のコマンドはディレクトリの変更であり、次にexecが続きます。これにより、(同じプロセスで)新しいシェルが開始され、目的のディレクトリで開始されます。

更新:

Busybox Shellが使用されている場合、busyboxは-lオプションを受け入れないため、ログインシェルの開始に問題があります。 execを実行する前に、dot .コマンドを使用して、プロファイルからコマンドを取得します。

/bin/sh -c "cd /mnt/flash;. /etc/profile;exec /bin/sh"
3
X Tian