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 命令行工具

Download history 211/week @ 2024-05-31 360/week @ 2024-06-07 29/week @ 2024-06-14

每月下载量:234

自定义许可协议

27KB
386

withd

withd 是一个简单的命令行工具,允许您在不影响当前 shell 的工作目录的情况下,以不同的工作目录运行命令。

这有什么用?

许多命令(如 gitnpmcargo)需要您从特定目录运行。这可以通过 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 的缩写。)

发布版本

  1. 重新生成 shell 完整性: cargo completions
  2. Cargo.toml 中提升版本。
  3. 将更新的 --help 输出粘贴到 README.md(此文件;请参阅顶部附近)。在 macOS 上,命令 cargo withd --help | pbcopy 很有帮助。注意--help 输出与 -h 输出不同:它更详细,这正是我们想要的。
  4. 构建 测试。后者本身会进行构建,但测试构建可能会隐藏有关死代码的警告,因此请两者都做。
    • 默认功能:cargo build && cargo test
    • 不包含:cargo build --no-default-features && cargo test --no-default-features
  5. 提交信息为 "将版本提升至 $VERSION。"。
  6. 标记为 "v$VERSION", 例如 git tag v1.0.10
  7. 推送:git push && git push --tags
  8. 发布:cargo publish

许可证

GNU通用公共许可证3.0版(或更高版本)。见LICENSE

依赖项

~7–17MB
~241K SLoC