Permiso denegado al ejecutar el progtwig C comstackdo en Linux

Estoy tratando de escribir un progtwig simple que llame a git checkout -- . en un repository de Github que sería un argumento de línea de command. Me gustaría llamarlo como > clearRepo repoName . Guardo todos mis repos en el mismo directory de Github.

El código es el siguiente:

 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <string.h> #include <errno.h> void print_error() { fprintf(stderr, "Error executing: %s\n", strerror(errno)); exit(EXIT_FAILURE); } void print_usage(char* this) { printf("SYNTAX ERROR:\n%s [directoryName]\n", this); exit(EXIT_FAILURE); } int main(int argc, char **argv) { if(argc != 2) { print_usage(argv[0]); } pid_t pid = fork(); if (pid == 0) { static char* params[] = {"git", "checkout", "--", ".", NULL}; char s[50], s2[50]; strcpy(s, "/home/myname/Documents/Github/"); strcpy(s2, argv[1]); strcat(s, s2); printf("s: %s\n", s); int err = execv(s, params); if(err == -1) { print_error(); } exit(127); } else { waitpid(pid, 0, 0); } return 0; } 

Se comstack bien, pero print_error () escupirá Error executing: Permission denied cada vez que lo ejecuto. No estoy muy familiarizado con la escritura de progtwigs para Linux, por lo que probablemente sea un simple error. La información sobre lo que estoy haciendo mal es apreciada. Gracias.

El primer argumento que le pasa a execv es un directory, pero execv espera un progtwig. El error "Permiso denegado" es un poco engañoso, porque no existe el "permiso para ejecutar directorys".

Para cambiar el directory actual, llame a chdir . Luego, llame a cualquiera de las funciones de exec* que desee para invocar a git .

Los commands y progtwigs de Git son bastante complicados.

Sigue estos pasos y puedes depurar tu problema.

  1. Ingrese los commands git escritos en el progtwig en un terminal y verifique si la lógica realmente funciona. (Se sugiere esto como dijiste que eras nuevo en Linux)
  2. Si funciona, cambie el permiso de su file escribiendo "chmod + x filename.extention".

nombre de file chmod u + x para cambiar el permiso de file. Si quiere pagar una sucursal, pero guarde los cambios, use git stash. Puede usar git stash pop o git stash cuando regrese a la sucursal.

https://git-scm.com/docs/git-stash