私は現在、組み込みLinuxシステムを開発しています。他の製品と同様にするには、起動時にシリアルポートを使用してアクセスできる指定されたディレクトリからシェルを起動する必要があります。
そのために、inittabスクリプトに次の行を追加しました。
::respawn:-/bin/sh
これまでは、シェルが/mnt/flashの代わりに/のパスワードで始まる点を除いて動作します。
私が考えることができる唯一の方法は、/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
答え1
シェルが少し異なるように開始されるように、いくつかのパラメータをシェルに提供できます。例えば。
/bin/sh -c "cd /mnt/flash;exec /bin/sh"
-c
次の文字列のコマンドが実行される始点です。
最初のコマンドはディレクトリの変更であり、次にexec
同じプロセスで新しいシェルが起動し、目的のディレクトリから開始されます。
修正する:
busyboxシェルを使用している場合、busyboxはこのオプションを許可しないため、ログインシェルの起動に問題が発生します-l
。たとえば、実行する前に、ドット.
コマンドを使用して設定ファイルからコマンドをインポートします。exec
/bin/sh -c "cd /mnt/flash;. /etc/profile;exec /bin/sh"