"Bad variable name" 尝试 运行 通过 Makefile 进行 phpunit 测试时没有弃用警告
"Bad variable name" when trying to run phpunit tests via a Makefile without deprecation warnings
我有一个名为 test
的 Make 目标。它看起来像这样:
test:
/var/www//vendor/bin/phpunit
我想设置一个 git 挂钩,在提交之前 运行 进行所有测试。为了在不因弃用警告而停滞不前的情况下执行此操作,我想让我的钩子 运行 成为一个不同的 Make 目标。它看起来像这样:
test-automated:
export SYMFONY_DEPRECATIONS_HELPER = disabled
/var/www//vendor/bin/phpunit
但是,当我尝试 运行 这个目标时,我收到了这个错误信息:
export SYMFONY_DEPRECATIONS_HELPER = "disabled" /bin/sh: export: line
1: : bad variable name make: *** [Makefile:14: test-automated] Error 2
如何使 Make 和 PHPUnit 运行 没有弃用警告?
附录:我也尝试了 export SYMFONY_DEPRECATIONS_HELPER=disabled
和 export SYMFONY_DEPRECATIONS_HELPER="disabled"
。在这两种情况下,Make 目标 运行,但显示了弃用警告,并且 Make 以代码 1 退出,这不是预期的结果。
这并不是对我所问问题的直接回答,但我发现这是可行的:
test-automated:
SYMFONY_DEPRECATIONS_HELPER=disabled /var/www//vendor/bin/phpunit
如果有人有更好的答案,我会留下这个问题。
您的回答是正确的做法。
makefile 配方是一个shell 脚本,配方的内容必须是有效的shell 语法;它不能是 makefile 语法。在shell中,变量赋值等号两边不能有空格;如果您在 shell 提示符中输入:
$ export foo = bar
未将变量 foo
分配给值 bar
并导出;正在尝试导出名为 foo
、=
和 bar
的 3 个变量,并且 =
不是有效的 shell 变量名称,因此您会收到此错误.
您所做的更改 export SYMFONY_DEPRECATIONS_HELPER=disabled
是正确的。
它不起作用的原因是食谱中的每个逻辑行都是 运行 在 分开的 shell 中。因此,在一个逻辑行上分配变量然后 运行 在另一个逻辑行中运行程序是行不通的:一旦 shell 退出,第一行上的分配就会丢失。
您可以使用以下任一方法:
test-automated:
SYMFONY_DEPRECATIONS_HELPER=disabled /var/www//vendor/bin/phpunit
就像你做的那样或(IMO 不太好但会工作):
test-automated:
export SYMFONY_DEPRECATIONS_HELPER=disabled; \
/var/www//vendor/bin/phpunit
通过在末尾添加 ; \
,您已将这两条物理线合并为一条逻辑线。
我有一个名为 test
的 Make 目标。它看起来像这样:
test:
/var/www//vendor/bin/phpunit
我想设置一个 git 挂钩,在提交之前 运行 进行所有测试。为了在不因弃用警告而停滞不前的情况下执行此操作,我想让我的钩子 运行 成为一个不同的 Make 目标。它看起来像这样:
test-automated:
export SYMFONY_DEPRECATIONS_HELPER = disabled
/var/www//vendor/bin/phpunit
但是,当我尝试 运行 这个目标时,我收到了这个错误信息:
export SYMFONY_DEPRECATIONS_HELPER = "disabled" /bin/sh: export: line 1: : bad variable name make: *** [Makefile:14: test-automated] Error 2
如何使 Make 和 PHPUnit 运行 没有弃用警告?
附录:我也尝试了 export SYMFONY_DEPRECATIONS_HELPER=disabled
和 export SYMFONY_DEPRECATIONS_HELPER="disabled"
。在这两种情况下,Make 目标 运行,但显示了弃用警告,并且 Make 以代码 1 退出,这不是预期的结果。
这并不是对我所问问题的直接回答,但我发现这是可行的:
test-automated:
SYMFONY_DEPRECATIONS_HELPER=disabled /var/www//vendor/bin/phpunit
如果有人有更好的答案,我会留下这个问题。
您的回答是正确的做法。
makefile 配方是一个shell 脚本,配方的内容必须是有效的shell 语法;它不能是 makefile 语法。在shell中,变量赋值等号两边不能有空格;如果您在 shell 提示符中输入:
$ export foo = bar
未将变量 foo
分配给值 bar
并导出;正在尝试导出名为 foo
、=
和 bar
的 3 个变量,并且 =
不是有效的 shell 变量名称,因此您会收到此错误.
您所做的更改 export SYMFONY_DEPRECATIONS_HELPER=disabled
是正确的。
它不起作用的原因是食谱中的每个逻辑行都是 运行 在 分开的 shell 中。因此,在一个逻辑行上分配变量然后 运行 在另一个逻辑行中运行程序是行不通的:一旦 shell 退出,第一行上的分配就会丢失。
您可以使用以下任一方法:
test-automated:
SYMFONY_DEPRECATIONS_HELPER=disabled /var/www//vendor/bin/phpunit
就像你做的那样或(IMO 不太好但会工作):
test-automated:
export SYMFONY_DEPRECATIONS_HELPER=disabled; \
/var/www//vendor/bin/phpunit
通过在末尾添加 ; \
,您已将这两条物理线合并为一条逻辑线。