inittab에서 스크립트를 실행하기 전에 환경 변수를 설정해 보세요.

inittab에서 스크립트를 실행하기 전에 환경 변수를 설정해 보세요.

inittab에는 다음과 같은 항목이 있습니다.

scpt:234:once:RSYNC_OPTIONS=-q /path/to/script/script.sh arg1 arg2 arg3 2>&1

그러나 실제로 실행하려고 시도했기 때문에 실패합니다 RSYNC_OPTIONS=-q.

scpt:234:once:export RSYNC_OPTIONS=-q;/path/to/script/script.sh arg1 arg2 arg3 2>&1

하지만 이것도 실패했다. 이를 수행할 수 있는 방법이 있습니까? 아니면 스크립트를 수정해야 합니까?

답변1

Linux sysvinit 구현의 소스 코드를 살펴보면 셸 특수 문자를 볼 때 셸을 실행하지만 exec문자열 앞에 특수 문자를 추가하므로 리디렉션을 넣고 인수에 특수 문자를 사용할 수 있지만 환경 변수는 다음과 같습니다.

  } else if (strpbrk(proc, "~`!$^&*()=|\\{}[];\"'<>?")) {
  /* See if we need to fire off a shell for this command */
        /* Give command line to shell */
        args[1] = SHELL;
        args[2] = "-c";
        strcpy(buf, "exec ");
        strncat(buf, proc, sizeof(buf) - strlen(buf) - 1);
        args[3] = buf;
        args[4] = NULL;

간단한 해결책은 를 실행하는 것입니다 env.

scpt:234:once:env RSYNC_OPTIONS=-q /path/to/script/script.sh arg1 arg2 arg3 2>&1

임의의 명령을 실행하는 방법에 대한 몇 가지 가능한 해결 방법은 다음과 같습니다.

scpt:234:once:>&1; RSYNC_OPTIONS=-q exec /path/to/script/script.sh arg1 arg2 arg3 2>&1
scpt:234:once:2>&1; RSYNC_OPTIONS=-q exec /path/to/script/script.sh arg1 arg2 arg3

관련 정보