【问题标题】:How do I extract partial path from pwd in tcsh?如何从 tcsh 中的 pwd 中提取部分路径?
【发布时间】:2015-09-19 00:58:24
【问题描述】:

我想基本上实现一个别名(使用 cd),它将我带到我 pwd 中的第 5 个目录。 IE。 如果我的密码是/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,因为它已经变成了一堆转义字符。

【问题讨论】:

    标签: path directory tcsh pwd


    【解决方案1】:

    这应该可以解决问题:

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

    【讨论】:

    • 您提供的解决方案会在 shell 启动时获取密码,并且其行为类似于硬编码路径。如何让别名在调用时评估 pwd?
    • 比使用source简单得多,使用'而不是"
    • @shx2 反引号 (`) 在单引号字符串 (') 中不起作用。
    • @Carpetsmoker 查看我的答案以了解如何使它们工作。使用单引号会将反引号的计算推迟到使用别名之前,而不是在定义别名时对其进行计算。
    【解决方案2】:

    @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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 2021-10-01
      • 2011-09-01
      相关资源
      最近更新 更多