exec filename - o que isso faz?

3

Encontrei o seguinte trecho de código (sh):

    TESTFILE=$TEST_PATH/test.out
    if [ -f $TESTFILE ]
    then
        exec < $TESTFILE
    else
        echo "$TEST_PATH: no test.out file"
    fi

o foco da minha pergunta é: o que esta linha está fazendo? (o resto eu entendo!)

        exec < $TESTFILE

O arquivo não é executável, nem outro processo é chamado, e não estou tendo sorte em encontrar o que o exec faz em um arquivo de texto simples.

    
por NWS 29.08.2012 / 17:02

2 respostas

7

A partir da descrição POSIX de exec :

exec - execute commands and open, close, or copy file descriptors

Nesse caso, não há comando, portanto somente os descritores de arquivos são modificados. Normalmente, os redirecionamentos que você escreve na linha de comando afetam o comando nessa linha. exec é como você faz redirecionamentos no shell atualmente em execução.

    
por 29.08.2012 / 17:09
9

O entendimento intuitivo pode ser ajudado pela observação desse padrão:

cmd                  # fork; execute cmd in child
cmd < /dev/null      # fork; redirect stdin and execute cmd in child
exec cmd             # execute cmd; no fork
exec cmd < /dev/null # redirect stdin and execute cmd; no fork
exec < /dev/null     # redirect stdin; no fork and no execution

Veja, exec não é realmente uma coisa. É uma coisa anti-coisa. Isso não significa "executar" a todos. Significa "não bifurcar". Isso faz com que o redirecionamento do comando e / ou a execução do comando aconteça no processo atual.

    
por 30.08.2012 / 01:37