摘要
正在生成中……
今天发现一个奇怪的问题,如果我直接运行这条命令:
docker run -i --rm -v
pwd:
pwd falconchen/m2k-php-fpm:latest php -r "echo 123;"
会得到正确的输出,“123”,
但是如果我在 /usr/local/bin/php
内写入
#!/bin/bash
docker run -i --rm -v `pwd`:`pwd` falconchen/m2k-php-fpm:latest php $@
保存并增加为可执行权限,运行 php -r "echo 123;"
将会报错:
PHP Parse error: syntax error, unexpected end of file in Command line code on line 1
Parse error: syntax error, unexpected end of file in Command line code on line 1
该如何修改?
这个错误是由于 $@
的展开方式导致的。在 Bash 脚本中,$@
如果没有被正确地用双引号包裹,会导致参数在传递过程中被错误地拆分。为了确保参数被正确传递,你需要在脚本中使用 "$@"
而不是 $@
。
下面是修改后的 /usr/local/bin/php
脚本:
#!/bin/bash
docker run -i --rm -v `pwd`:`pwd` falconchen/m2k-php-fpm:latest php "$@"
请确保你保存了这个脚本,并给予其可执行权限:
chmod +x /usr/local/bin/php
现在,运行 php -r "echo 123;"
应该能够正确输出 123
。
解释
-
"$@"
代表所有传递给脚本的参数,并保持它们的完整性(即每个参数仍然作为独立的参数)。
-
$@
在没有双引号的情况下会将所有参数视为一个整体,并在参数包含空格或特殊字符时引起问题。
通过使用 "$@"
,可以确保 Docker 容器中的 php
命令能够正确接收到传递的参数,从而避免语法错误。