Iniciar sh em um diretório especificado do inittab

3

Atualmente, estou trabalhando em um sistema Linux embarcado. Para que seja semelhante aos nossos outros produtos, eu preciso que ele inicie um shell em um diretório especificado na inicialização, acessível usando a porta serial.

Para isso, eu tenho essa linha no script inittab:

::respawn:-/bin/sh

Isso está funcionando até agora, apenas que o shell é iniciado com um pwd de /, em vez de / mnt / flash.

A única maneira que eu posso fazer é não iniciar / bin / sh, mas sim um script como esse:

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

Existe uma maneira de fazer isso in-line no inittab sem um segundo script?

Edit: Eu preciso que isso seja um script de login. Isso é o que o - antes do /bin/sh significa. Se eu executar apenas ::respawn:/bin/sh -c "cd /mnt/flash;exec /bin/sh" , altere a pasta conforme o esperado, mas não obtenho um shell de login que cause outros problemas.

Se eu executar com ::respawn:-/bin/sh -c "cd /mnt/flash;exec /bin/sh , recebo este erro:

/bin/sh: exec: line 1: -/bin/sh: not found
    
por Dakkaron 30.06.2015 / 12:37

1 resposta

2

Você poderia dar alguns argumentos à shell, para que ela comece de forma um pouco diferente. por exemplo.

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

Começando com -c , que executará comandos na sequência seguinte.

O primeiro comando é a mudança de diretório, seguida por exec , que iniciará um novo shell (no mesmo processo) que agora está iniciando no diretório desejado.

Atualização:

Se o shell busybox estiver sendo usado, há um problema ao iniciar um shell de login, pois o busybox não aceita a opção -l . Use o comando dot . para originar comandos de seu (s) perfil (s) antes de você fazer o exec eg

/bin/sh -c "cd /mnt/flash;. /etc/profile;exec /bin/sh"
    
por 30.06.2015 / 13:05