PHP:shell_exec多个命令

时间:2017-08-13 12:33:56

标签: php git bash batch-file

所以我试图在两个git命令之间创建修改过的文件列表:

shell_exec("
  git diff --name-only $remoteCommitId $localCommitId > diff &&
  SET /p DIFF=<diff &&
  git archive --output=$zipName HEAD %DIFF%
");

但是,没有创建zip文件我还尝试将命令与&;分开。如果在批处理文件中运行这些命令,一切正常。

我在Windows上,我这样做的原因是here

我只想通过shell_exec在两个git提交之间创建zip文件,因此欢迎通过shell_exec工作的任何其他方法。

更新

如果我直接在控制台上运行这些命令:

git diff --name-only 207b606c270fc14a7161647c2fbe8f9a7d8e05a1 17dcc2233678df4ce86c8713e0349d68e45c3c96 > diff&& SET /p DIFF=<diff&& git archive --output=deployment.zip HEAD %DIFF%

它确实创建了deployment.zip文件,但问题是deployment.zip文件中只包含单个根路径文件,而不包含其他文件夹(本例中为vendor):

这是差异文件:

composer.json
vendor/anlutro/l4-settings/.gitignore
vendor/anlutro/l4-settings/.travis.yml
vendor/anlutro/l4-settings/CONTRIBUTING.md
vendor/anlutro/l4-settings/LICENSE
vendor/anlutro/l4-settings/README.md
vendor/anlutro/l4-settings/composer.json
vendor/anlutro/l4-settings/phpunit.xml
vendor/anlutro/l4-settings/src/ArrayUtil.php
vendor/anlutro/l4-settings/src/DatabaseSettingStore.php
vendor/anlutro/l4-settings/src/Facade.php
vendor/anlutro/l4-settings/src/JsonSettingStore.php
vendor/anlutro/l4-settings/src/MemorySettingStore.php

但deployment.zip文件只包含composer.json文件。

1 个答案:

答案 0 :(得分:1)

尝试改为:

 shell_exec("cmd /C \"ascript.bat\"");

使用ascript.bat脚本列出所有必要的命令 请参阅&#34; how not to open a Cmd window when running a batch file&#34;