从inittab中在指定目录中启动sh

从inittab中在指定目录中启动sh

我目前正在研究嵌入式Linux系统。为了使其与我们的其他产品类似,我需要让它在启动时在指定目录中启动一个 shell,可以使用串行端口进行访问。

为此,我在 inittab 脚本中添加了这一行:

::respawn:-/bin/sh

到目前为止,这是有效的,只是 shell 以 / 的 pwd 启动,而不是 /mnt/flash。

我能想到的唯一方法是让它不启动 /bin/sh 而是启动这样的脚本:

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

有没有办法在 inittab 中内联执行此操作,而无需第二个脚本?

编辑:我需要这是一个登录脚本。这就是-前面的/bin/sh意思。如果我只是运行::respawn:/bin/sh -c "cd /mnt/flash;exec /bin/sh"它,它确实会按预期更改文件夹,但我没有得到导致其他问题的登录 shell。

如果我运行它,::respawn:-/bin/sh -c "cd /mnt/flash;exec /bin/sh我会收到此错误:

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

答案1

您可以给 shell 一些参数,以便它的启动略有不同。例如。

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

-cwhich 开始将执行以下字符串中的命令。

第一个命令是目录更改,接下来exec将启动一个新的 shell(在同一进程中),该 shell 现在在您所需的目录中启动。

更新:

如果正在使用 busybox shell,则启动登录 shell 时会出现问题,因为 busybox 不接受该-l选项。在执行例如之前,使用点.命令从您的配置文件中获取命令exec

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

相关内容