//&> /dev/null;
OUTFILE=$(basename "$0" .c);
gcc $0 -o "$OUTFILE";
./"$OUTFILE";
exit;
#include <stdio.h>
int main () {
printf("hello world!n");
}
Salve este código como hello.c altere o bit executável e execute como binário
chmod +x hello.c
./hello.c
Então, vamos aprofundar
//&> /dev/null;
OUTFILE=$(basename "$0" .c);
gcc $0 -o "$OUTFILE";
./"$OUTFILE";
exit;
Claro, todas as linhas são interpretadas independentemente por dois programas diferentes: gcc e bash.
Ambos acham que esta é a longa linha comentada, quebrada em poucos por barras invertidas.
E o bash pensa que este é o código do bash e realmente executa // como um comando e dá erro, mas ignoramos esse fato redirecionando a saída para / dev / null.
Em seguida, ele vai além, executando essa longa linha até que o comando de saída seja alcançado.
Este truque foi criado por causa da preguiça de digitar todos os comandos para compilar e executar o arquivo de código-fonte c simples. Mas isso pode ser absolutamente aplicado a qualquer linguagem de compilação.
@haynesgt forneceu uma solução ainda mais bonita:
#if 0
OUTFILE=$(basename "$0" .c)
gcc $0 -o "$OUTFILE"
./"$OUTFILE"
exit
#endif
#include <stdio.h>
int main(){
printf("hello");
return 0;
}
Obrigado, @haynesgt ! Isso é inteligente!