我正在努力用 C 实现一个 Unix shell,我目前正在处理相对路径的问题。尤其是在输入命令时。现在我每次都必须输入可执行文件的完整路径,而我更愿意简单地输入“ls”或“cat”。
我设法获得了 $PATH 环境变量。我的想法是在“:”字符处拆分变量,然后将每个新字符串附加到命令名称并检查文件是否存在并且可执行。
例如,如果我的 PATH 是:
“/bin:/usr/bin”,我输入“ls”,我希望程序首先检查“/bin/ls”是否存在并且是可执行的,如果不存在则转到“/usr/bin/”。
两个问题:
1)这是一个很好的方法吗? (它不一定是最好的。我只是想确保它会起作用。
2) 更重要的是, 如果文件存在且可执行,我如何检查 C?
我希望我足够清楚,并且......谢谢:)
最佳答案
别。执行此检查是错误的;它固有地受制于竞赛条件。相反, 尝试 使用适当的 exec
-family 调用执行它。如果它不是可执行文件,则会出现错误。
另请注意,您不需要自己搜索 PATH
; execvp
可以为您做到这一点。
关于c - 在 : check if file is executable 中实现 Unix shell,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4629643/