我创建了一个小型shell,让用户输入一个像'ls'这样的命令,它会列出目录中的内容,就像它在我的代码中使用execv()一样,但是似乎并不适用于用户输入'set name =“bob”'之类的内容。我一直在寻找在我的代码中用于执行set命令时应该使用什么的地方,并且我能找到的最好的是system(),但这仍然不适合我。有任何想法吗?在c程序中执行SET命令
回答
由于您正在执行fork-and-exec或system(),因此该命令确实在单独的进程中运行。该过程中发生的事情(如设置环境变量)不会影响父级的环境。 (另外一个问题是,set
实际上并没有创建一个环境变量。您将需要在[BA] SH export
或setenv
在[T] CSH做到这一点。)
所以你需要编写你的迷你shell明确地处理set
命令,而不是将它传递给另一个程序。
set
是一个shell-built命令,而不是外部命令(实际上它需要具有预期的效果,即在shell进程本身内修改shell变量)。
这意味着您需要在shell自身内查找并处理set
,方法是将某个变量添加到跟踪shell变量的内部数据结构中(如果它已经存在,则更新它)。
那么这是否意味着我将不得不在我的小型shell中编写自己的set命令,它将执行类似于内置set命令的操作? – user1186710 2012-02-03 04:54:17
@ user1186710:对 - 如果你想支持'set',那就是。 – caf 2012-02-03 05:08:39
非常感谢! – user1186710 2012-02-05 09:26:03
你可能想看看setenv(3)和getenv(3)。这些是用于在C程序中更改和读取环境变量的函数。
但那不会让我创造变数吗? – user1186710 2012-02-03 18:26:32
从手册页:“setenv()函数将变量_name添加到值为_value的环境中,”所以,是的。 – user732933 2012-02-04 02:43:35
- 1. C++ linux从程序执行命令行
- 2. C程序的命令行执行
- 3. 通过c程序执行clearcase命令
- 4. 从C程序执行pi命令
- 5. 从C程序执行shell命令
- 6. 如何从C++程序执行命令行命令
- 7. 在python程序中执行linux命令
- 8. 在java程序中执行bash命令
- 9. 在java程序中执行winzip命令
- 10. 在C/C++程序中执行sudo命令
- 11. 包括在C#中的命令行应用程序执行EXE
- 12. 使用C#程序如何执行命令提示符命令
- 13. 执行dir命令在C:\
- 14. 在C++中调用命令行程序
- 15. 在c程序中运行shell命令
- 16. 在c程序中执行带有选项的命令
- 17. 执行shell命令并在C程序中读取其输出
- 18. 在C程序中使用sudo执行shell命令
- 19. C#运行命令不执行命令
- 20. 在java程序上执行adb命令
- 21. 在Java应用程序中执行命令执行问题
- 22. 从命令行执行程序
- 23. 执行命令行应用程序
- 24. java程序命令行执行
- 25. SAS命令行 - 部分程序执行
- 26. 在命令提示符下使用c#为wpf应用程序执行命令
- 27. 在Windows 8中执行cmd命令c#?
- 28. 如何在C中执行shell命令?
- 29. C++在shell中执行许多命令
- 30. 在c#中使用DbCommand执行命令#
这看起来像我的学校一年级项目之一。一个全部... – Eregrith 2012-02-03 09:21:29
你有什么意思? – user1186710 2012-02-03 19:19:51