inittab의 지정된 디렉토리에서 sh를 시작하십시오.

inittab의 지정된 디렉토리에서 sh를 시작하십시오.

저는 현재 임베디드 Linux 시스템을 개발하고 있습니다. 다른 제품과 유사하게 만들려면 시작 시 직렬 포트를 사용하여 액세스할 수 있는 지정된 디렉터리에서 셸을 시작해야 합니다.

이를 위해 inittab 스크립트에 다음 줄을 추가했습니다.

::respawn:-/bin/sh

지금까지는 쉘이 /mnt/flash 대신 /의 비밀번호로 시작한다는 점을 제외하고는 작동합니다.

내가 생각할 수 있는 유일한 방법은 /bin/sh를 시작하지 않고 다음과 같은 스크립트를 시작하는 것입니다.

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

두 번째 스크립트 없이 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"

관련 정보