No inittab, tentando definir a variável de ambiente antes de executar o script

1

No inittab, tenho uma entrada que se parece com isso:

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

No entanto, ele falha porque, na verdade, está tentando executar RSYNC_OPTIONS=-q . Eu também tentei:

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

mas isso também falha. Existe uma maneira de fazer isso ou eu tenho que modificar o script?

    
por Troy 24.03.2016 / 16:45

1 resposta

1

Olhando o código-fonte da implementação do Linux sysvinit, ele executa um shell quando vê caracteres especiais do shell, mas adiciona exec antes da string, o que torna possível colocar redirecionamentos e usar caracteres especiais em argumentos, mas não para definir uma variável de ambiente dessa maneira.

  } 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;

Uma solução simples seria executar env .

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

Algumas soluções possíveis para ilustrar como executar um comando arbitrário:

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
    
por 25.03.2016 / 01:02

Tags