应用Magento CE补丁


15

在Magento 下载页面的“修补程序”部分下

请将补丁上传到您的Magento根目录并运行适当的SSH命令:对于扩展名为`.sh的补丁文件:sh patch_file_name.sh示例:sh PATCH_SUPEE-1868_CE_1.7.0.2_v1.sh

Magento建议直接调用该sh命令以运行其补丁运行程序。的文件扩展名也.sh支持此功能。

但是,如果您查看每个修补程序运行程序文件的顶部,则shebang行指向bash

#!/bin/bash
# Patch apllying tool template
# v0.1.2
# (c) Copyright 2013. Magento Inc.
#

我内的程序员想信任源文件,但是该过程想遵循Magento网站上写的内容,愤世嫉俗的人想知道是否已针对bash和sh之间的差异对补丁进行了测试。


修补过程应该像压缩.diff文件一样简单。REQUIRED_UTILS='sed patch'我在.sh脚本中看到的全部。最新版本的升级文档读起来像立体声说明,升级不应该那么麻烦。
B00MER 2014年

2
我有点盲目地获取补丁,chmod + x并运行它。(好吧,我先检查内容),但是我在本地运行(基于Mac的开发人员),因此我可以在部署之前进行git分支并提交到测试分支。
Barry Carlyon 2014年

3
@ B00MER这很棘手。我个人同意,但是对于精通技术但对UNIX不精通的人来说,手动应用补丁似乎太过分了。我可以了解补丁程序安装程序背后的动机。
艾伦·斯托姆

再想一遍。例如,shebang lins可以是#!/ bin / php,sh执行“足够”以读取shebang行并将脚本传递给shebang'ed程序。关于手动应用,补丁仍然包含Git Diffs,因此您可以“轻松”应用自己。但是,是否有理由要求Magento提供仅包含已更改文件的zip以及Patch(除了Core编辑之外就可以了)?
巴里·卡里昂

还有一件事。使用.txt以外的文件扩展名可能会使其对不太熟练的用户更具逻辑性,以避免使无扩展名的文件在本地用户文件系统中浮动。我觉得bash和sh可以互换。
巴里·卡里昂

Answers:


8

实际上,您必须使用bash。您在补丁的第14行上明确指出了以下代码:

if (( $? != 0 )); then

$((是XCU sh中的有效算术表达式,但((不是。)

但是,在许多类似UNIX的平台上,/bin/sh仅仅是的符号链接/bin/bash。当使用name调用时sh,bash确实禁用其POSIXly-unstrict行为的一部分,但不是全部。这些补丁对于以sh调用的bash可能工作正常。


在这种情况下,脚本没有在sh下执行,sh正在转储到指定的shebang行程序吗?
Barry Carlyon 2014年

实际上,内核负责解释shebang。如果您chmod +x script && ./script使用内核,将尝试在shebang行中以脚本文件作为第一个或第二个参数来执行命令。视情况而定,不能保证该过程树涉及任何外壳。sh但是,如果以脚本作为参数执行,则shebang行将被忽略。
kojiro 2014年

因此,这意味着我按照错误的补丁说明进行操作。就像他们说的是sh脚本,但我只是做./script多么有趣
Barry Carlyon 2014年

-2

万一将来对某人有帮助,我已经用Phpstorm应用了补丁,它的补丁工具很棒。应用补丁程序花费了不到30秒的时间,没有任何问题,您还可以查看并查看文件之间的差异。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.