我目前正在研究嵌入式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"
从-c
which 开始将执行以下字符串中的命令。
第一个命令是目录更改,接下来exec
将启动一个新的 shell(在同一进程中),该 shell 现在在您所需的目录中启动。
更新:
如果正在使用 busybox shell,则启动登录 shell 时会出现问题,因为 busybox 不接受该-l
选项。在执行例如之前,使用点.
命令从您的配置文件中获取命令exec
/bin/sh -c "cd /mnt/flash;. /etc/profile;exec /bin/sh"