php - ShellScript 不运行“cd”,在 php 中调用 sh
问题描述
看看是否有人去过那里,我在 shellscript 中有这个简单的代码,我访问文件夹(/home/teste4toquew5824),然后确认我是否使用 pwd 进入了目录,
#!/bin/bash
cd /home/teste4toquew5824 && pwd
我有一个调用这个 sh 的 php 文件(位于 /var/www/html):
$var= shell_exec('/usr/local/bin/api/teste.sh');
echo "<br><br>";
var_dump($var);
当我收到 pwd 的返回时,它显示好像它仍然存在于 php 文件 (/var/www/html) 的目录中,换句话说,它不是“接受”或执行 cd 命令。
1 - 我已经申请了 php 和 sh 的权限。
2 - 我已经确认目录 /home/teste4toquew5824 存在
3 - 我已经测试并在 sh 中放置了一个 echo,只是为了确认 php 正在正确调用和执行 sh。
4 - 我已经在 sh 中放了一行来复制一个文件,只是为了确保另一个命令也在执行,并将文件复制到 /var/www/html
5 - 我尝试将顶部的 bash 更改为 #!/bin/sh -
有没有人有任何想法?非常感谢
解决方案
您需要知道当前工作目录是每个进程的属性。为此,该cd
命令是 shell 内部的命令,shell 通过调用chdir(2)
系统调用来执行该命令。
这意味着 shell 可以更改它的目录,然后 fork 几个进程,这些进程将继承父(shell)的工作目录,但是 shell 无法更改调用它的进程的目录. 这就是您调用脚本(shell 进程)更改其目录的原因,调用pwd
,显示该目录实际上是您请求的目录,但您自己的目录仍然与以前相同,就好像 shell 忽略了您的命令。
在 posix 系统中,没有系统调用可以更改另一个进程的当前目录,而是由进程自己完成。
混淆源于该cd
命令看起来像在不同程序中实现的其他命令,但该cd
命令是内部命令(您不会在/bin/cd
任何地方看到命令)
推荐阅读
- methods - 类似方法的语法中的 Raku 中缀运算符
- sendgrid - sendgrid/mail 不允许动态发送“发件人”
- javascript - 从 FLASK 中的本地文件夹读取数据
- selenium - Perl:抓取网站以及如何使用 Perl Selenium:Chrome 从网站下载 PDF 文件
- html - 从带有烧瓶的for循环中显示的列表中将一些选定的项目保存到mysql
- pandas - 如何按日期范围过滤数据透视表报告列
- python - flask_sqlalchemy AttributeError:“list”对象没有属性“topic1”
- time - 是否可以创建具有时间到期的哈希?
- javascript - 等到 Filestream 完成
- javascript - 从反应钩子返回回调的最佳方法