3

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

任何指针?

编辑:好的,我来这里是为了打印出我想用 awk cd 进入的目录:

别名 cdf 'echo `pwd` | awk -F '\''/'\'' '\''BEGIN{OFS="/";} {打印 $1,$2,$3,$4,$5,$6,$7;}'\'''

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

4

2 回答 2

2

这应该可以解决问题:

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 缺少功能,但是您可以用它来模拟它们。从来没说过好看

于 2015-07-01T19:15:59.783 回答
0

@carpetsmoker 使用的解决方案cut既好又简单。但是由于他的解决方案笨拙地使用了另一个文件 and 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
于 2015-07-02T08:31:07.683 回答