Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何存储每个进程的变量,类似于unix存储每个进程的pwd?_C_Bash_Unix_Tags_Filesystems - Fatal编程技术网

C 如何存储每个进程的变量,类似于unix存储每个进程的pwd?

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

我正在尝试使用类似于文件系统API(cd、pwd、ls等)的API编写一个命令行实用程序

我试图编写的实用程序是在标记集而不是文件夹上运行的。您不是在文件夹x/y/z中,而是在集合x+y+z的交点处

我打算将工作目录的等价物存储在一个环境变量中,这样每个shell都可以有自己的工作标记集,但是遇到了障碍。当生成子进程以更改工作集时,它将获得所有环境变量的自身副本,然后,当它退出时,父进程环境变量保持不变

有人能想出另一种方法来解决这个问题吗


谢谢。

我在irc上问了同样的问题,得到了满意的答案


Bash函数不是作为子进程运行的,因此我可以将可执行文件包装在一个shell函数中,并让该函数更新环境变量。

如果仔细观察,您会发现一些命令(最明显的是
cd
)实际上不作为命令存在于
/bin
/usr/bin
或磁盘上的任何其他位置。这是因为它不能作为独立命令存在,因为它只更改当前进程的工作目录。这些命令内置于shell(如Bash)中,并在shell程序中进行内部处理。在我看来,你想要的是制作你自己的外壳式程序。子进程不能操纵父进程的环境。你必须重新思考你的设计。我在irc上问了这个问题,得到了一个聪明的答案。Bash函数不是在子进程中运行的,因此我可以将程序封装在负责更新环境变量的shell函数中。它带来了一些复杂性,比如必须为每个外壳提供包装,但这是一条前进的道路。