我也在尝试从基本名称中获取命令。这就是为什么我在解析行后使用类似这样的原因...
while (*line == ' ' || *line == '\n')
*line++ = '\0';
line = basename(line); // base
*argv++ = line;
好的基名似乎工作正常,但是如果我输入ls -l之类的命令,则会出现错误...
输入输出是这样的
ls
arg[0]: 'ls' and arg[1]: '(null)'
shellTest
bin/ls
arg[0]: 'ls' and arg[1]: '(null)'
shellTest
ls -l
arg[0]: '-l' and arg[1]: '-l'
Execution of the command is failed
: No such file or directory
如果我删除
line = basename(line);
,那么除了基本名称之外,其他所有东西都在工作,所以解析不能成为问题...我该如何解决这个问题?
最佳答案
问题可能出在使用basename()
的周围代码中。 basename()
的POSIX标准说:
描述
basename()
函数应采用path指向的路径名,并返回指向该路径名最后一部分的指针,删除任何尾随的'/'
字符。
如果路径指向的字符串完全由'/'
字符组成,则basename()
应返回指向字符串"/"
的指针。如果path指向的字符串恰好是"//"
,则返回'/'
还是"//"
由实现定义。
如果path为空指针或指向空字符串,则basename()
应返回指向字符串"."
的指针。
basename()
函数可以修改path指向的字符串,并可以返回指向静态存储的指针,然后可以通过随后对basename()
的调用将其覆盖。
basename()
函数不必是线程安全的。
返回值
basename()
函数应返回一个指向路径最后一部分的指针。
该规范中有很多麻烦的地方。
但是看起来有点像您尝试使用相同的空间同时存储两个值,但未成功。
关于c - Shell基本名称错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7170150/