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