当前位置: 技术问答>linux和unix
C语言中执行shell脚本出错(菜鸟求助)
来源: 互联网 发布时间:2016-07-24
本文导语: 程序很简单,如下: int main() { ........... ........... system("cd /etc/test"); system("./file.sh"); .......... .......... } 出错提示:sh:./file.sh: No such file or directory 但是,/etc/test/目录下的file.sh文件确实存...
程序很简单,如下:
int main()
{
...........
...........
system("cd /etc/test");
system("./file.sh");
..........
..........
}
出错提示:sh:./file.sh: No such file or directory
但是,/etc/test/目录下的file.sh文件确实存在啊,并且已经执行了命令:chmod a+x file.sh了。
int main()
{
...........
...........
system("cd /etc/test");
system("./file.sh");
..........
..........
}
出错提示:sh:./file.sh: No such file or directory
但是,/etc/test/目录下的file.sh文件确实存在啊,并且已经执行了命令:chmod a+x file.sh了。
|
再试试这个
system("cd /etc/test; ./file.sh");
system("cd /etc/test; ./file.sh");
|
你把c程序跟file.sh放在同一个目录试一试
|
如果实在不行,这样写:
char shellname[64];
memset(shellname,0,sizeof(shellname));
sprintf(shellname,"/etc/test/file.sh");
system(shellname);
这样应该是可以的。
char shellname[64];
memset(shellname,0,sizeof(shellname));
sprintf(shellname,"/etc/test/file.sh");
system(shellname);
这样应该是可以的。
|
system("cd /etc/test");
system("pwd"); // 看看这里什么结果。我想不会是/etc/test,而是原来的目录
system("./file.sh");
system("pwd"); // 看看这里什么结果。我想不会是/etc/test,而是原来的目录
system("./file.sh");
|
$ man system
......
int system(const char *command);
DESCRIPTION
system() executes a command specified in command by calling /bin/sh -c
command
......
我是这么理解的:system函数是通过调用/bin/sh来执行指定命令,也就是说它会另外启动一个shell来执行命令,所以转换目录只在那个新启动的shell里有效。而对于原来这个shell,它还在原来的目录里。
......
int system(const char *command);
DESCRIPTION
system() executes a command specified in command by calling /bin/sh -c
command
......
我是这么理解的:system函数是通过调用/bin/sh来执行指定命令,也就是说它会另外启动一个shell来执行命令,所以转换目录只在那个新启动的shell里有效。而对于原来这个shell,它还在原来的目录里。
|
两个system不在同一个shell中运行,所以会找不到,合并成一个,用全路径如
system("/etc/test/file.sh");
|
解释到点上了
|
可能是
|
你的第一个system会创建一个子进程,cd不过影响这个子进程。所以你的第二个system会抱怨找不到sh文件,因为前面那个cd根本就没有影响到它。