如何在C中自带shell中使用bash shell内置命令?

时间:2018-01-25 11:58:50

标签: c linux bash shell

我在IT研究的第一年和我一起练习。我必须使用C为Linux编写自己的shell。我有几点要做,其中一个是我的shell必须使用来自man bash的2-3个shell内置命令。 如何在代码中实现此功能?通过使用system()或execl()等函数,或者在这种情况下它是否正确,还有其他选项吗?

2 个答案:

答案 0 :(得分:1)

(我知道你被要求实现你的自己的微小的unix shell;这是一个非常好但常见的练习)

大多数情况下,您无法使用bash builtin commands(例如cdulimit等...贝壳。您不应该使用bash/bin/shsystem(3),而是直接使用fork(2)execve(2)等...并实施您自己的globbing (见glob(7))。

例如,您必须在shell中自己显式实现一些cd命令(调用chdir(2)系统调用)。因为当前working directory是每个进程的特定属性(因此每个进程都有自己的工作目录)。另请参阅credentials(7)fork(2)execve(2)

这就是无法通过cd foo 实施system("cd foo")的原因,因为system(3)启动了一个单独的,新的/bin/sh进程(以及cd foo只会在chdir新进程中sh,而不在您的进程中。{/ p>

大多数Unix shell都是free software。随意学习他们的源代码。还可以考虑使用strace(1)来了解他们正在做什么system calls

还阅读一些关于Linux编程的书(例如ALP或更新的东西)。另请参阅intro(2)syscalls(2)以及从中引用的man页面。

答案 1 :(得分:-1)

如果我理解你的问题,你想编写一个能够在C中执行bash命令的shell。在这种情况下:

你可以使用Execve(man execve),它可以运行bash命令

您可以在环境中找到路径。 (main(int ac,char ** argv,char ** env))

运行命令时必须使用fork(),因为execve()会关闭你的prog。