Ein Skript ist nicht direkt ausführbar, beim Ausführen eines Skripts identifiziert der Kernel den zu startenden Interpreter und übergibt den Dateinamen als Argument an den Interpreter, in Ihrem Fall eine Shell.
Wenn Sie ein in einer Zeichenfolge gespeichertes Skript ausführen möchten, können Sie die Shell Ihrer Wahl direkt starten und die Zeichenfolge als Standardeingabe über eine Pipe übergeben.
ist hier Art und Weise, es zu tun popen mit:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
FILE *fp;
char *prefix="/bin/bash <<'%EOF%'\n";
char *script="#!/bin/bash\necho foo\ndate\n";
char *suffix="%EOF%\n";
char *command;
char buf[1024];
command=malloc(strlen(prefix)+strlen(script)+strlen(suffix)+1);
sprintf(command,"%s%s%s",prefix,script,suffix);
fp=popen(command, "r");
if(fp == NULL) {
perror("Error\n");
exit(1);
}
while(fgets(buf, sizeof(buf), fp) != NULL) {
printf("%s", buf);
}
pclose(fp);
return 0;
}
Ich glaube nicht, dass dies möglich ist. Sie könnten die Zeichenfolge jedoch an eine interaktive Version des Skript-Interpreters übergeben. – EOF
Und auch sehr, _sehr_ vorsichtig sein. – edmz
Wohin willst du stdout und stderr von deinem Skript gehen? – cdarke