7 个版本
0.3.1 | 2024年6月10日 |
---|---|
0.3.0 | 2024年6月10日 |
0.2.3 | 2024年6月7日 |
0.1.0 | 2024年6月5日 |
#1675 in 命令行工具
每月下载量:234
27KB
386 行
withd
withd
是一个简单的命令行工具,允许您在不影响当前 shell 的工作目录的情况下,以不同的工作目录运行命令。
这有什么用?
许多命令(如 git
、npm
和 cargo
)需要您从特定目录运行。这可以通过 cd
进入目录完成
cd /path/to/repo
git status
cd -
或通过使用子shell来隔离更改
( cd /path/to/repo && git status )
前者很麻烦。后者在尝试与脚本中的 shell 变量一起工作时可能会令人困惑,例如,因为子shell 不能将更改传播到父shell。也容易忘记。
然后是 CDPATH
。如果您的 shell 中设置了此值,则 cd
的行为会改变,您可能最终会进入一个不同于预期的目录。我看到这已经成为一个引起混淆——破坏性和非常难以诊断的错误。
withd
没有这些问题。它是简单且可预测的。
withd--帮助
$ withd --help
Run a command in another directory.
Usage: withd [OPTIONS] <DIRECTORY> [COMMAND]...
Arguments:
<DIRECTORY>
The directory in which to execute the command.
[COMMAND]...
The command and its arguments.
[env: SHELL=/opt/homebrew/bin/bash]
Options:
-c, --create
Create the directory if it does not exist.
-t, --temporary
Create a temporary directory within DIRECTORY. This temporary
directory will be deleted when the command completes. Note that this
option modifies slightly how the DIRECTORY argument is used. For
example:
- `withd -tc foo/bar.XXXX.baz …` will create the directory `foo` (and
will not remove it later on) and a temporary directory inside it
called `bar.1234.baz` (where the 1234 is random).
- `withd -tc foo …` will create `foo`, as above, and a temporary
directory inside it named `.tmp123456` (again, where 123456 is
random).
- `withd -t foo …` will create a temporary directory named
`.tmp123456` (again, where 123456 is random) in `foo`, but assumes
that `foo` already exists.
- `withd -t foo.XXXX.bar …` will create a temporary directory named
`foo.1234.bar` in the system's temporary directory, e.g. $TMPDIR.
- `withd -t "" …` will create a temporary directory named `.tmp123456`
in the system's temporary directory, e.g. $TMPDIR.
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
The executed command can use the `WHENCE` environment variable to refer back to
the directory from whence `withd` was invoked.
安装
目前,请使用 Cargo
cargo install withd
用法
withd /path/to/repo git status
要创建目录
withd -c /some/where echo "Hello, world!"
(-c
是 --create
的缩写。)
发布版本
- 重新生成 shell 完整性:
cargo completions
。 - 在
Cargo.toml
中提升版本。 - 将更新的
--help
输出粘贴到README.md
(此文件;请参阅顶部附近)。在 macOS 上,命令cargo withd --help | pbcopy
很有帮助。注意,--help
输出与-h
输出不同:它更详细,这正是我们想要的。 - 构建 并 测试。后者本身会进行构建,但测试构建可能会隐藏有关死代码的警告,因此请两者都做。
- 默认功能:
cargo build && cargo test
- 不包含:
cargo build --no-default-features && cargo test --no-default-features
- 默认功能:
- 提交信息为 "将版本提升至
$VERSION
。"。 - 标记为 "v
$VERSION
", 例如git tag v1.0.10
。 - 推送:
git push && git push --tags
。 - 发布:
cargo publish
。
许可证
依赖项
~7–17MB
~241K SLoC