【问题标题】:How to use execv() with cd command in linux? [duplicate]如何在 linux 中使用 execv() 和 cd 命令? [复制]
【发布时间】:2014-10-31 14:41:17
【问题描述】:

cd 命令文件路径在哪里,在哪个环境变量中?! 我使用PATH环境变量,但我没有在其中找到cd命令,所以我想在execv中执行cd命令,提前谢谢你,我的代码:

char * envVariable = get env("PATH");
execv(path, args);

【问题讨论】:

  • 执行cd 毫无意义。你会启动一个 shell,改变 shell 中的目录,退出 shell - 让其他一切都和以前一样。
  • 在我的操作系统实验室作业中需要它...我不知道怎么做!!
  • cd 是内置的 shell,不是命令。您可以使用chdir() 更改目录。
  • 如果要执行命令,需要先fork!如果您想查看重新编码的命令执行器:github.com/charvoa/42 / 并且内置函数应该是硬编码的!
  • 当前目录与当前进程关联,但不是环境变量。一些 shell 将 $PWD 设置为当前目录,但这只是一个约定;不能保证$PWD 会继续匹配当前目录,并且chdir() 不会触及任何环境变量。

标签: c linux environment-variables cd execv


【解决方案1】:

如果您正在编写一个 shell - 或类似的代码,您需要cd 成为一个调用chdir(2) 系统调用的内置

当您更改任何进程私有的属性时,这是必需的。当前目录就是这样一个属性(setrlimit(2) 等设置的限制也是如此......)

这解释了为什么你不能做 system("cd /tmp"); system 函数正在分叉一个 /bin/sh -c 进程,并且那个 shell 正在更改目录,而不是父进程(你的程序)。

阅读fork(2)execve(2)Advanced Linux Programming

【讨论】:

  • 然后我将停止命令输入,并必须在当前路径中搜索命令的参数(所需目录)......等等。
  • 如果“当前路径”是指$PATH 的当前值,则不相关。 cd 命令以其通常的形式将其参数传递给 chdir()(尽管它可能会识别一些特殊情况,例如 cd - 以更改到上一个目录)。
猜你喜欢
  • 2023-02-01
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 2015-01-30
  • 1970-01-01
相关资源
最近更新 更多