저는 현재 임베디드 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"