C 如何存储每个进程的变量,类似于unix存储每个进程的pwd?
我正在尝试使用类似于文件系统API(cd、pwd、ls等)的API编写一个命令行实用程序 我试图编写的实用程序是在标记集而不是文件夹上运行的。您不是在文件夹x/y/z中,而是在集合x+y+z的交点处 我打算将工作目录的等价物存储在一个环境变量中,这样每个shell都可以有自己的工作标记集,但是遇到了障碍。当生成子进程以更改工作集时,它将获得所有环境变量的自身副本,然后,当它退出时,父进程环境变量保持不变 有人能想出另一种方法来解决这个问题吗C 如何存储每个进程的变量,类似于unix存储每个进程的pwd?,c,bash,unix,tags,filesystems,C,Bash,Unix,Tags,Filesystems,我正在尝试使用类似于文件系统API(cd、pwd、ls等)的API编写一个命令行实用程序 我试图编写的实用程序是在标记集而不是文件夹上运行的。您不是在文件夹x/y/z中,而是在集合x+y+z的交点处 我打算将工作目录的等价物存储在一个环境变量中,这样每个shell都可以有自己的工作标记集,但是遇到了障碍。当生成子进程以更改工作集时,它将获得所有环境变量的自身副本,然后,当它退出时,父进程环境变量保持不变 有人能想出另一种方法来解决这个问题吗 谢谢。我在irc上问了同样的问题,得到了满意的答案 B
谢谢。我在irc上问了同样的问题,得到了满意的答案
Bash函数不是作为子进程运行的,因此我可以将可执行文件包装在一个shell函数中,并让该函数更新环境变量。如果仔细观察,您会发现一些命令(最明显的是
cd
)实际上不作为命令存在于/bin
或/usr/bin
或磁盘上的任何其他位置。这是因为它不能作为独立命令存在,因为它只更改当前进程的工作目录。这些命令内置于shell(如Bash)中,并在shell程序中进行内部处理。在我看来,你想要的是制作你自己的外壳式程序。子进程不能操纵父进程的环境。你必须重新思考你的设计。我在irc上问了这个问题,得到了一个聪明的答案。Bash函数不是在子进程中运行的,因此我可以将程序封装在负责更新环境变量的shell函数中。它带来了一些复杂性,比如必须为每个外壳提供包装,但这是一条前进的道路。