Existe um comando que cria um arquivo temporário contendo os argumentos passados para ele?

2

Eu posso colar o conteúdo de um arquivo em um comando usando cat e backticks:

ls 'cat filenames'

Existe uma maneira de fazer o contrário - transformar uma string em um nome de arquivo (temporário)?

gcc -o cpuburn 'uncat "main(){while(1);}"'.c
    
por Claudiu 20.05.2014 / 00:43

1 resposta

5

Você pode passar o código-fonte na entrada padrão do gcc. Como gcc não recebe um nome de arquivo, você precisa da opção -x para informar o idioma de saída. Você pode passar a entrada por meio de uma string aqui (mais conveniente para uma única linha) , um aqui documento , ou um pipe.

gcc -o cpuburn -x c - <<<'main(){while(1);}'

Se você precisar de um nome de arquivo na linha de comando, poderá usar substituição de processo para gerar o conteúdo. Isso não lhe dá controle sobre o nome do arquivo (será algo como /dev/fd/42 ).

gcc -o cpuburn -x c <(echo 'main(){while(1);}')

Se você realmente precisar de controle sobre o nome do arquivo temporário, precisará de algo mais complexo, no qual você cria e remove manualmente o arquivo temporário.

src=$(mktemp XXXXXXXXXX.c)
trap 'rm "$src"' EXIT INT TERM HUP
echo 'main(){while(1);}' >"$src"
gcc -o cpuburn "$src"

(Esta resposta assume que seu shell é bash, zsh ou ksh93.)

    
por 20.05.2014 / 00:54