1

我正在尝试通过键入“project something”来自动化我打开编辑器和“cd-ing”到项目文件夹的日常任务。到目前为止,一切都很好。代码正在运行。但我得到了一些意想不到的行为。当前目录标签显示Lukas-mbp:~sub_directory(2603m|master) $。这是sub_directory在那儿做什么。这是我正在使用的变量名,如下面的代码。但是谁能告诉我为什么我的终端显示的是它而不是实际的目录?

function project() {
  for directory in ~/projects/*
  do
    for sub_directory in $directory/*
    do
      if [[ "$sub_directory" =~ $1 ]]; then
        cd "$sub_directory"
        sublime $sub_directory
        return
      fi
    done
  done
}
4

1 回答 1

0

使用简单的通配符而不是做所有不必要的循环!但是,我还没有完全理解您的子目录树,所以我提供了两个替代方案,使用合适的那个。将函数添加到~/.bashrc

1 - 如果您的子目录树是这样的(与您的示例完全相同*):

~/projects/subdir1/target1/
~/projects/subdir1/target2/
~/projects/subdir2/target3/
~/projects/subdir2/target4/

该功能将是这样的:

function project {
    cd ~/projects/*/"$1"
    sublime .
    # or sublime ./*
}

* 请记住,如果您有两个或多个具有相同名称的目标,但在不同的subdir上,它将只匹配第一个,就像您的示例一样。

2 - 如果您的子目录树是这样的(这对我来说似乎更常见):

~/projects/target1/
~/projects/target2/
~/projects/target3/
~/projects/target4/

该功能将是这样的:

function project {
    cd ~/projects/"$1"
    sublime .
    # or sublime ./*
}
于 2013-02-15T18:25:06.560 回答