有没有办法只为某些目录创建别名?

Pet*_*lan 2 unix git macos

我正在寻找一种分配别名的方法,该别名仅在单个文件夹中运行,并且可以通过 git 轻松传输。

我正在想象某种.aliases文件,我可以在其中创建类似的东西ALIAS test=pytest[....],当他们从这个 repo 中提取时,这些东西会被其他人接收。

这样的事情可能在 OSX 终端中原生存在,还是我需要某种第三方库/每个人的.bashrc/手动编辑.zshrc

感谢您的帮助,如果有什么不清楚的请告诉我!

Ror*_*ane 5

这在本地是不可能的。这主要是出于安全原因——您不希望将项目下载cd到其目录中,并让它覆盖ls命令以便ls将您的所有文件上传给黑客。

direnvMac 和 Linux有一个工具,.envrc当你cd进入一个目录时,它会自动从文件中加载环境变量,这与你想要的很接近,但direnv 不支持定义 aliases/functions。(并且需要direnv先安装。)

以下是别名的一些替代方法,用于使相同的命令在不同的项目目录中运行不同的内容。您应该选择哪一个取决于您的项目及其生态系统的约定。

外壳脚本

适用于多种编程语言但仅适用于 Unix 的解决方案是包含 shell 脚本:

test
#!/usr/bin/env bash
pytest ...
Run Code Online (Sandbox Code Playgroud)

并告诉人们用./test.

您还可以将所有脚本放在一个文件夹中,例如script并告诉人们运行script/test.

一种 Makefile

如果需要安装Make,则可以使脚本跨平台(这需要避免在脚本中使用特定于平台的命令)。您将定义一个Makefile包含您的别名:

Makefile
.PHONY: test
test:
    pytest ...
Run Code Online (Sandbox Code Playgroud)

并告诉人们用make test.

特定package.json于语言的脚本,例如JavaScript

一些语言有其他约定。例如,如果您将 JavaScript 与 NPM 包管理器一起使用,则约定是将脚本放在您的package.json

package.json
{
  "name": "my-js-project",
  ...,
  "scripts": {
    "test": "node tests.js"
  },
}
Run Code Online (Sandbox Code Playgroud)

然后人们会尝试标准命令npm test,它会调用这个脚本。如果脚本有一个非标准名称,您可以告诉他们npm run test改为。