首页 > 解决方案 > 如何从保存的 Bash 变量中运行 ESLint?

问题描述

我正在为项目工作设置一个项目初始化脚本和一个 git 预提交挂钩。我们有我想要运行的用于 linting 的脚本,而不是在根目录中,而是在子目录中,我想保持这种方式。

我想要做的是将 eslint 和 phpcs 的二进制可执行文件的完整相对路径设置为 bash 变量,然后能够运行它们。我还希望能够从 bash 变量中执行 composer.phar 二进制文件。

所以这就是我所做的。

# Set tool paths
PHPCS_PATH=`./wp-content/themes/our-theme/vendor/bin/phpcs`
PHPCBF_PATH=`./wp-content/themes/our-theme/vendor/bin/phpcbf`
ESLINT_PATH=`./wp-content/themes/our-theme/node_modules/.bin/eslint`
SASSLINT_PATH=`./wp-content/themes/our-theme/node_modules/.bin/sass-lint`
COMPOSER_PATH=`./wp-content/themes/our-theme/composer.phar`

我试图从项目根目录本地测试这些路径,但我不断收到错误。

我将其中一行复制并粘贴到我的终端中,按 Enter,然后执行以下操作之一:

我失去理智了吗?我到底如何使路径可执行?如果我获取路径的内容并运行它,它就可以正常工作。

示例:./wp-content/themes/swmaster/node_modules/.bin/eslint实际上告诉我指定路径。

我在这里做错了什么?

标签: bashvariableseslintlint

解决方案


看起来您的问题出在这些作业中:

# Set tool paths
PHPCS_PATH=`./wp-content/themes/our-theme/vendor/bin/phpcs`
PHPCBF_PATH=`./wp-content/themes/our-theme/vendor/bin/phpcbf`
ESLINT_PATH=`./wp-content/themes/our-theme/node_modules/.bin/eslint`
SASSLINT_PATH=`./wp-content/themes/our-theme/node_modules/.bin/sass-lint`
COMPOSER_PATH=`./wp-content/themes/our-theme/composer.phar`

这些反引号是命令替换。一种更容易阅读的写作方式是:

PHPCS_PATH=$(./wp-content/themes/our-theme/vendor/bin/phpcs)
...

我不认为那是你真正想要的。命令替换实际上执行内部的内容,并被替换为stdout. 我认为您实际上是在尝试进行字符串分配。这可以通过简单地删除反引号来完成,因为路径中没有空格。但无论如何,双引号是一个好习惯。尝试这个:

# Set tool paths
PHPCS_PATH="./wp-content/themes/our-theme/vendor/bin/phpcs"
PHPCBF_PATH="./wp-content/themes/our-theme/vendor/bin/phpcbf"
ESLINT_PATH="./wp-content/themes/our-theme/node_modules/.bin/eslint"
SASSLINT_PATH="./wp-content/themes/our-theme/node_modules/.bin/sass-lint"
COMPOSER_PATH="./wp-content/themes/our-theme/composer.phar"

解决您的问题的另一种方法是将这些目录添加到您的PATH变量中。例如,如果您将您设置PATH为包含 phpcs 和 phpcbf 的 bin 目录,您将能够执行这些程序而无需指定完整(或在这种情况下为相对)路径:

export PATH=$PATH:./wp-content/themes/our-theme/vendor/bin
# or export PATH=$PATH:/full/path/to/wp-content/themes/our-theme/vendor/bin
# Now you can just run the line below without a path...
phpcs

推荐阅读