Применение 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
2
Я несколько слепо извлекаю патч, chmod + x и запускаю его. (Сначала я проверяю содержимое), но я запускаю его локально (на основе Mac), чтобы перед развертыванием я мог выполнить git branch и зафиксировать ветку test.
Барри Карлион
3
@ B00MER Это сложно. Лично я согласен, но для тех, кто разбирается в технологиях, но не в Unix, люди, вручную накладывающие исправления, кажутся слишком большим шагом. Я могу понять мотивы установки патча.
Алан Сторм
Просто снова думаю об этом. Линейками shebang могут быть, например, #! / Bin / php, и sh выполняет «достаточно», чтобы прочитать строку shebang и передать скрипт в программу shebang. На предмет руководства относится, патч содержит Git Diffs в любом случае, так что вы можете «легко» применить себя. Но есть ли аргумент, чтобы попросить Magento предоставить zip с измененными файлами только вместе с патчем (что хорошо, за исключением изменений в Core)?
Барри Карлион,
Еще кое-что. Использование расширения файла, отличного от .txt, вероятно, делает его более логичным для менее опытных, чтобы избежать распространения файлов без расширений в файловой системе локальных пользователей. Я чувствую, что Bash и Sh в любом случае взаимозаменяемы.
Барри Карлион

Ответы:

8

Вы должны использовать Bash, на самом деле. В строке 14 патча, который вы явно указали, находится этот код:

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

$((является допустимым арифметическим выражением в XCU sh, но ((это не так.)

Однако на многих UNIX-подобных платформах /bin/shэто просто символическая ссылка на /bin/bash. Когда вызывается с именем sh, bash отключает некоторые из его POSIXly-нестрогих поведения, но не все. Вполне вероятно, что эти патчи будут хорошо работать для bash, вызываемого как sh.

Кодзиро
источник
В этом случае, однако, сценарий не выполняется под sh, sh выводит в заданную программу строки shebang?
Барри Карлион
На самом деле ядро ​​отвечает за интерпретацию Шебанга. Если chmod +x script && ./scriptядро попытается выполнить команду в строке shebang с файлом сценария в качестве первого или второго аргумента. В зависимости от обстоятельств, нет никакой гарантии, что какая-либо оболочка будет включена в это дерево процессов. Однако, если вы выполняете shсценарий в качестве аргумента, строка shebang будет игнорироваться.
Кодзиро
Это означает, что я неправильно следую инструкциям патча. Как говорится, пишите сценарий, а я просто делаю. / Сценарий Как забавно
Барри Карлайон
-2

В случае, если это поможет кому-то в будущем, я использовал Phpstorm для применения патча, и его инструмент патча отлично работает. Для применения патча потребовалось менее 30 секунд без каких-либо проблем, и вы также можете увидеть и просмотреть различия между файлами.

codelogn
источник