Bash:在目录 `directory_name.git` 中,如何 cd 到 `../directory_name`?

发布于 2024-10-11 04:44:39 字数 202 浏览 3 评论 0原文

我对 Bash 脚本相当陌生,希望执行以下操作:

脚本的 pwd 是“/a/b/c/directory_name.git/”,我想 cd 到“../directory_name”,其中directory_name 可以可以是任何东西。有什么简单的方法可以做到这一点吗?

我猜我必须将 pwd 的结果放入变量中并删除最后 4 个字符。

I'm pretty new to Bash scripting and am looking to do the following:

The script's pwd is "/a/b/c/directory_name.git/" and I'd like to cd to "../directory_name" where directory_name could be anything. Is there any easy way to do this?

I'm guessing I'd have to put the result of pwd in a variable and erase the last 4 characters.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

暮倦 2024-10-18 04:44:39
tmpd=${PWD##*/}
cd ../${tmpd%.*}

或更简单

cd ${PWD%.*}

测试

$ myPWD="/a/b/c/directory_name.git"
$ tmpd=${myPWD##*/}
$ echo "cd ../${tmpd%.*}"
cd ../directory_name

*注意:$PWD 不包含尾部斜杠,因此 ${param##word} 扩展可以正常工作。

tmpd=${PWD##*/}
cd ../${tmpd%.*}

or perhaps more simply

cd ${PWD%.*}

Test

$ myPWD="/a/b/c/directory_name.git"
$ tmpd=${myPWD##*/}
$ echo "cd ../${tmpd%.*}"
cd ../directory_name

*Note: $PWD does not include a trailing slash so the ${param##word} expansion will work just fine.

另类 2024-10-18 04:44:39

尝试:

cd `pwd | sed -e s/\.git$//`

反引号执行里面的命令,并使用那个命令的输出作为cd的命令行参数。

要调试这样的管道,使用 echo 很有用:

echo `pwd | sed -e s/\.git$//`

Try:

cd `pwd | sed -e s/\.git$//`

The backticks execute the command inside, and use the output of that command as a command line argument to cd.

To debug pipelines like this, it's useful to use echo:

echo `pwd | sed -e s/\.git$//`
攒一口袋星星 2024-10-18 04:44:39

这应该有效:

cd "${PWD%.*}"

This should work:

cd "${PWD%.*}"
临走之时 2024-10-18 04:44:39

没想到这么快就能得到这么多答案,所以我有时间想出我自己的不优雅的解决方案:

#!/bin/bash

PWD=`pwd`
LEN=${#PWD}
END_POSITION=LEN-4
WORKING_COPY=${PWD:0:END_POSITION}

echo $WORKING_COPY
cd $WORKING_COPY

上面可能有一个更优雅的:)

Didn't expect to get so many answers so fast so I had time to come up with my own inelegant solution:

#!/bin/bash

PWD=`pwd`
LEN=${#PWD}
END_POSITION=LEN-4
WORKING_COPY=${PWD:0:END_POSITION}

echo $WORKING_COPY
cd $WORKING_COPY

There's probably one above that's much more elegant :)

情绪少女 2024-10-18 04:44:39

这就是 basename 的用途:

cd ../$(basename "$(pwd)" .git)

That's what basename is for:

cd ../$(basename "$(pwd)" .git)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文