如何从 tcsh 中的 pwd 中提取部分路径?

How do I extract partial path from pwd in tcsh?

我基本上想实现一个别名(使用 cd),它将我带到我的 pwd 中的第 5 个目录。 IE。 如果我的密码是 /hm/foo/bar/dir1/dir2/dir3/dir4/dir5,我想要我的别名,说 cdf 带我去 /hm/foo/bar/dir1/dir2 。 所以基本上我试图弄清楚如何在 tcsh 中将给定路径剥离到给定数量的目录级别。

有什么指点吗?

编辑: 好的,我走到这一步是为了打印出我想使用 awk 进入的目录:

alias cdf 'echo `pwd` | awk -F '\''/'\'' '\''BEGIN{OFS="/";} {print ,,,,,,;}'\'''

我发现很难对其进行 cd,因为它已经变成了一堆转义字符。

这应该可以解决问题:

alias cdf source ~/.tcsh/cdf.tcsh

~/.tcsh/cdf.tcsh中:

cd "`pwd | cut -d/ -f1-6`"

我们使用 pwd 工具获取当前路径,并将其通过管道传输到 cut,我们在此处按分隔符 / (-d/) 拆分并显示前 5 个字段 (-f1-6).
您可以将 cut 视为 非常 awk;在许多情况下,这就足够了,并且极大地简化了事情。

您的别名的问题在于 tcsh 古怪的引用规则。我什至不打算尝试解决这个问题。我们使用 source 来规避所有这些; tcsh 缺少功能,但您可以用它来模拟它们。没说好看

@carpetsmoker 使用 cut 的解决方案非常简单。但由于他的解决方案笨拙地使用了另一个文件和 source,这里演示了如何避免这种情况。使用单引号可防止过早评估。

% alias cdf 'cd "`pwd | cut -d/ -f1-6`"'
% alias cdf
cd "`pwd | cut -d/ -f1-6`"

下面是单引号如何与反引号一起使用的简单演示:

% alias pwd2 'echo `pwd`'
% alias pwd2
echo `pwd`
% pwd2
/home/shx2