我想基本上实现一个别名(使用cd),它将我带到我的pwd中的第5个目录。即
如果我的密码是/hm/foo/bar/dir1/dir2/dir3/dir4/dir5
,我想要我的别名,说cdf带我去/hm/foo/bar/dir1/dir2
。
所以基本上我试图弄清楚如何将给定路径剥离到tcsh中给定数量级别的目录。
任何指针?
编辑: 好的,我到目前为止打印出我想要使用awk的目录:
别名cdf'echo`pwd` | awk -F'\''/'\'''\''BEGIN {OFS =“/”;} {print $ 1,$ 2,$ 3,$ 4,$ 5,$ 6,$ 7;}'\'''
我发现很难对此进行cd,因为它已经变成了一堆乱码。
答案 0 :(得分: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的quircky引用规则。我甚至不打算尝试解决这个问题。我们使用source
来逃避所有这些;
tcsh缺少函数,但你可以用它来模拟它们。从来没有说它很漂亮。
答案 1 :(得分:0)
@ 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