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.)