我目前正在尝试从我的 docker 主机运行这个命令:
docker exec container_name /bin/bash -c "touch .env; APP_KEY=$(php artisan key:generate | grep -o '\[.*]' | sed 's/[][]//g');"
问题是表达式 $(expression) 将由主机计算,其中 php 不在路径中,而它应该在路径中。
我如何告诉 docker 它应该使用容器 shell 来评估容器中的表达式?或者是否有另一种解决方法来实现这一点?
最佳答案
您需要以某种方式引用字符串以避免扩展(单引号),这意味着您还需要转义任何嵌套的单引号和其他转义字符:
docker exec container_name /bin/bash -c \
'touch .env; APP_KEY=$(php artisan key:generate | grep -o \'\\\[.*]' | sed \'s\\/[][]//g\');'
或转义任何 shell 字符(如美元):
docker exec container_name /bin/bash -c \
"touch .env; APP_KEY=\$(php artisan key:generate | grep -o '\[.*]' | sed 's/[][]//g');"
关于laravel - 在使用 docker exec 时评估容器内的 bash 表达式,而不是主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47479604/