假设我的
package.json
中有以下内容:
{
"bin": {
"my-command": "bin/my_command.sh"
}
}
然后使用
npm install -g
安装后,假设我的 my-command
设置正确,我可以从任何地方运行 PATH
。但是,从my_command.sh
,我如何引用我的项目安装的目录?例如,假设我有一个配置文件,我想在 my_command.sh
中读取该文件,并具有以下项目布局:
my-project/
├── bin
│ └── my_command.sh
├── config.yml
└── package.json
这可能吗?如果是这样,怎么办?我这样做的最初动机是我想将
cd $SOME_DIR/my-project && npm run dev
“别名”到一个可以从任何地方运行的命令,但为此脚本需要知道 my-project
的位置,而我不知道如何这样做。
您可以在 shell 脚本中使用
dirname
命令来获取脚本的目录。在您的 my_command.sh
脚本中,您可以使用以下行来获取脚本的目录:
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
这将为您提供
my_command.sh
所在目录的完整路径。然后,您可以使用此变量来引用项目中的其他文件。例如,要读取 config.yml
文件,您可以执行以下操作:
CONFIG_FILE="$SCRIPT_DIR/../config.yml"
这将为您提供
config.yml
文件的完整路径,无论您从何处运行脚本。