C语言开发shell运行时提示'lsh: no such file or directory'如何解决
问题排查方向
- 你的命令分割逻辑大概率出错:你定义的分隔符宏
delimiters没有包含空格,而你输入命令时参数之间以空格分隔,这会导致ls -l整串被当成单个命令名去查找,系统自然不存在该名称的可执行文件。你需要把分隔符宏修改为" \t\r\n\a",补充空格作为分隔符。 - 你调用的exec族函数不支持PATH自动搜索:如果你用的是
execl/execv/execve这类函数,必须传入命令的完整绝对路径(比如/bin/ls)才能正常识别,直接传ls会找不到文件。如果不需要自定义路径搜索逻辑,直接换用execvp/execlp即可,这两个函数会自动遍历系统PATH环境变量的目录查找对应可执行文件。 - 参数数组格式不符合要求:exec族函数要求传入的参数数组
args必须以NULL作为最后一个元素,否则会传参异常导致执行失败。 - 自定义路径拼接逻辑错误:如果你是自己实现PATH遍历拼接命令路径的逻辑,检查路径拼接是否正确,比如是否漏了路径和命令之间的斜杠,导致拼接出
/binls这类错误路径。
快速验证方法
你可以在execute函数开头加一行调试打印代码:
printf("调试:当前要执行的命令是->%s\n", args[0]);
运行后输入ls -l,如果打印结果是ls -l,就可以确定是分隔符缺失空格的问题;如果打印结果是ls,再排查exec函数的调用逻辑即可。
内容的提问来源于stack exchange,提问作者gettingthere24
相关产品推荐
相关产品推荐

