El shell usa espacios para separar el comando a ejecutar y sus parámetros.
En el primer ejemplo, el comando a ejecutar es . con un parámetro de a.out . El . comando es un atajo de shell para source , que toma el nombre de un archivo que contiene comandos de shell como su primer parámetro y ejecuta esos comandos en el shell actual. Este comando falla porque a.out es un archivo binario, no un script de shell.
En el segundo ejemplo, el comando a ejecutar es ./a.out , lo que significa ejecutar el archivo a.out que reside en el directorio actual.
./programejecuta un archivo llamadoprogramubicado en su directorio de trabajo actual (./) (en un nuevo shell para un script de shell)..es lo mismo quesource, que ejecuta un script de shell en su shell actual . A diferencia de./program, ¡no se puede usar para ejecutar binarios! Como ejemplo, podría usar este comando para ejecutar su.bashrcshell script, porque desea que este script modifique su shell actual .