gpt4 book ai didi

更改目录的 Bash 函数

转载 作者:行者123 更新时间:2023-11-29 09:16:56 25 4
gpt4 key购买 nike

我有一个常见的用例,我想为此编写一个函数:我经常想 cd 到与某个文件相关的某个目录。

我目前的工作流程是这样的:

$ gem which rspec/core | xargs echo -n | pbcopy
$ cd *paste and delete end until direcory looks right*

<子>注意:gem which rspec/core 打印类似“/Users/joshcheek/.rvm/gems/ruby-1.9.3-p125/gems/rspec-core-2.10.0/lib/rspec/core.rb"

我希望它看起来像这样:

$ gem which rspec/core | 2dir 3

这会将我 cd 到“/Users/joshcheek/.rvm/gems/ruby-1.9.3-p125/gems/rspec-core-2.10.0”(传递参数“3”告诉它删除“lib/rspec/core.rb"从最后开始)

这是迄今为止我得到的最好的:

2dir() {
read dir
for i in $(seq 1 $1)
do
dir="${dir%/*}"
done
cd "$dir"
}

但是 cd 改变了函数的目录,而不是我的。我试过用别名交换它,但不知道如何创建匿名函数或传递参数。

最佳答案

我会使用:

2dir()
{
name=${2:?'Usage: 2dir count path'}
count=$1
while [[ $count -gt 0 ]]; do name=$(dirname "$name"); ((count--)); done
cd "$name"
}

并将其用作:

2dir 3 $(gem which rspec/core)

这适用于您的管道无法做到的地方。管道进程中的 cd 会影响该(子)shell,但不会影响父进程的当前目录。可以使这个函数起作用。

如果你愿意,你可以使用你的 dir="${dir%/*}" 代替我的 dirname,除了你最终会在如果您在只有 5 个组件时指定 10,则您的主目录而不是当前目录(或根目录,具体取决于您提供的是相对路径名还是绝对路径名)。

关于更改目录的 Bash 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10621483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com