![수정된 argv[0] 프로그램을 실행하기 위해 busybox ash 쉘을 사용하는 방법은 무엇입니까?](https://linux55.com/image/110476/%EC%88%98%EC%A0%95%EB%90%9C%20argv%5B0%5D%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%B4%20busybox%20ash%20%EC%89%98%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
나는 bash
간단하게 를 사용하겠습니다 exec -a
. busybox에서 어떻게 할 수 있나요? 가능합니까, 아니면 exec(3)
직접 호출 하려면 자체 C 프로그램을 작성해야 합니까 ?
답변1
어떤 버전의 busybox를 사용하고 있나요? ~에 따르면https://git.busybox.net/busybox/tree/shell/ash.c더 깊이 파고들면 exec
라인 9352 주변에서 다음 코드를 발견할 수 있습니다.exec [-a customname] ...
execcmd(int argc UNUSED_PARAM, char **argv)
{
optionarg = NULL;
while (nextopt("a:") != '\0')
/* nextopt() sets optionarg to "-a ARGV0" */;
argv = argptr;
if (argv[0]) {
char *prog;
iflag = 0; /* exit on error */
mflag = 0;
optschanged();
/* We should set up signals for "exec CMD"
* the same way as for "CMD" without "exec".
* But optschanged->setinteractive->setsignal
* still thought we are a root shell. Therefore, for example,
* SIGQUIT is still set to IGN. Fix it:
*/
shlvl++;
setsignal(SIGQUIT);
/*setsignal(SIGTERM); - unnecessary because of iflag=0 */
/*setsignal(SIGTSTP); - unnecessary because of mflag=0 */
/*setsignal(SIGTTOU); - unnecessary because of mflag=0 */
prog = argv[0];
if (optionarg)
argv[0] = optionarg;
shellexec(prog, argv, pathval(), 0);
답변2
exec -a
Busybox 1.27부터 지원됩니다., 다음 질문에 대한 답변도 참조하세요.대상 애플리케이션의 0번째 매개변수를 설정하는 POSIX 방법이 있습니까?다른 방법으로 이를 달성하는 방법을 알아보세요.