代码之家  ›  专栏  ›  技术社区  ›  Chris Bloom

在这个bash函数中我做错了什么?

  •  0
  • Chris Bloom  · 技术社区  · 14 年前

    我正在尝试创建一个指向特定目录的函数,如果指定了一个参数,请将其添加到目录字符串中。但是无论我尝试什么,我都无法让它工作,bash总是报告X不是一个目录,即使我将它复制/粘贴到一个新的命令行,它也可以从那里工作。

    function projects ()
    {
      DIR=
      if [ -n "$1" ]
      then
        DIR=$1
      fi
      echo "~/Projects/Working Branches/$DIR" | sed 's/ /\\&/g' | xargs cd
    }    
    

    -

    $ projects Parametric\ Search\ API
    /usr/bin/cd: line 4: cd: ~/Projects/Working Branches/Parametric Search API: No such file or directory
    $ projects "Parametric Search API"
    /usr/bin/cd: line 4: cd: ~/Projects/Working Branches/Parametric Search API: No such file or directory
    

    我还尝试将sed regexp修改为 s/ /\\\\\\&/g 它会产生一个看似正确转义的字符串,但会产生相同的错误

    $ projects Parametric\ Search\ API
    /usr/bin/cd: line 4: cd: ~/Projects/Working\ Branches/Parametric\ Search\ API: No such file or directory
    $ projects "Parametric Search API"
    /usr/bin/cd: line 4: cd: ~/Projects/Working\ Branches/Parametric\ Search\ API: No such file or directory
    

    我终于试过了 $DIR 用我能想到的每一句话,但到目前为止运气不好。

    4 回复  |  直到 14 年前
        1
  •  4
  •   Brian Campbell Dennis Williamson    14 年前

    ~ 在这种情况下,壳在传递到 cd . 你可以用 $HOME ~/ 在引号之外。

    而且,您不需要有条件地设置 $DIR 基于 $1 ,也不需要使用 sed xargs . 只是使用 $1 直接在路径中;如果为空,则目录组件将为空,只剩下 Working Branches 光盘 .

    function projects () {
      cd "$HOME/Projects/Working Branches/$1"
    }
    

    应该管用,稍微短一点但不太清楚

    function projects () {
      cd ~/"Projects/Working Branches/$1"
    }
    
        2
  •  2
  •   Bart Sas    14 年前

        3
  •  2
  •   David M.    14 年前

    也许你设计得太过了:

    cd "~/Projects/Working Branches/"
    cd "$DIR"
    

    我真的不明白 sed 不过,也许我遗漏了什么。

        4
  •  1
  •   Nifle Hassan Syed    14 年前

    xargs cd 在我的聚会上不合作。我想是因为 参数代换 想要申请和 是bashshell中的内置函数。

    尝试 echo "Projects" | xargs cd

    另一个问题是 ~ 不会像你想象的那样被回声放大。尝试改用完整路径。或者使用反勾号扩展 ~

    echo ´echo ~/`"Projects/Working Branches/$DIR"