【发布时间】:2012-09-27 17:12:39
【问题描述】:
我正在 ubuntu 上编写一个 UNIX minishell,并尝试在此时添加内置命令。当它不是内置命令时,我会 fork 然后子进程执行它,但是对于内置命令,我只会在当前进程中执行它。
所以,我需要一种方法来查看文件是否存在(如果存在,则不是内置命令),但是 execvp 使用环境 PATH 变量自动查找它们,所以我不知道如何手动查找事先检查。
那么,你们知道我如何通过提供名称来测试参数以查看它是否是内置命令吗?
谢谢大家。
【问题讨论】:
-
如果你知道你的内置命令是什么,你为什么不通过查看你的内置命令列表来检查程序是否是一个?你管理那些,对吧?或者真正的问题是如何check for existance of a file in C?
-
这是一个很好的观点,这样会更有意义。我将内置函数保存在另一个 .c 文件中,有没有一种简单的方法可以检查这些函数是否存在于主文件的范围内?
-
我不确定你在尝试什么。有有 种方法可以找出C 中定义了哪些函数,但在你这样做之前,你应该问问自己你在那里所做的是否正确。 IMO 检查提供的命令是否是内置的,不应超过在字符串列表或类似内容中的搜索。
-
注意
test是一个内置的shell;即使您编写了一个名为test的测试程序,如果您在没有路径名的情况下调用test,它也会由shell 执行(但如果您指定路径名,则使用您的./test程序)。当第一次在 Unix 上编程时,这会导致混乱。同样,如果我创建一个名为cd的命令,shell 会忽略它并在名称仅为cd时调用它的内置命令(但和以前一样,如果命令名称上有路径,例如./cd,然后由 shell 调用)。 -
我看了一下测试,但我不太确定它是什么。您在另一篇文章中说我不应该明确搜索某个函数的存在,而应该明确搜索文件的存在。我很迷茫,我只是想找到一种方法来查看一个函数是否存在于主范围内,如果不存在,那么它就是一个非内置的。
标签: c shell testing path execvp