私は現在、組み込み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
シェルにいくつかの引数を指定して、開始が少し異なるようにすることができます。例えば。
/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"