我正在製作一些程序,其中包含向客戶端發送shell腳本的服務器。客戶端獲取代碼並將其放入一個文件中,然後執行它。C將文件寫入可執行文件ASCII
加法功能:
void addScript(char *name,char *content){
int fd;
char path[BUFSIZ];
strcpy(path,"scripts/");
strcat(path,name);
strcat(path,".sh");
printf("file : %s\n",path);
fd = open(path,O_WRONLY|O_CREAT|O_TRUNC,S_IRWXU|S_IRGRP);
if(fd == -1){
printf("Error openning file !!");
return;
}
write(fd,content,strlen(content));
write(fd,"\n",1);
close(fd);
}
我有一個文件,但是當我嘗試運行它EXEC給我一個錯誤:
Exec failed : Exec format error
我的腳本運行文件命令,它給我:
mount.sh: Non-ISO extended-ASCII text
而在手寫腳本(這工作之一),我有:
diskUse.sh: POSIX shell script, ASCII text executable
我無法找到如何強制文件類型,當我用我的功能創建它時,任何人都有想法?謝謝 !
編輯一些細節:
非工作文件的例子:
#!/bin/sh
mount
「有趣」的是,它工作得很好,如果我用手工運行它從我的殼(zsh)與./mount.sh,但我有警告:
./mount.sh: line 1: #!/bin/sh: No such file or directory
但是:
$ ll /bin/sh
lrwxrwxrwx 1 root root 4 30 déc. 23:08 /bin/sh -> bash
瓦爾內容是一個char *,發送throught網絡。用戶在Web界面中鍵入它,然後將其存儲在SQLite3數據庫中,然後通過網絡發送。
'char * content'的內容是什麼?該字符串很可能具有非ASCII字符。 – m0skit0 2015-02-09 11:22:48
您無法定義'file'類型。這種類型是從內容中猜測出來的。 – ceving 2015-02-09 11:23:22
我猜你的腳本缺少shebang,但我不確定(你沒有提供太多細節)。確保你的腳本的前綴是'#/ bin/bash'(假設你的腳本是Bash腳本)。 – 2015-02-09 11:24:07