使用bash变量进入目录

时间:2013-04-21 13:30:17

标签: linux bash shell scripting

我的〜/ .bash_aliases文件中有以下功能

mycd() {
  dir=$(cat)
  echo "$dir"
  cd "$dir"
}
alias c=mycd

gotoD() {
  find -name $1 -type $2 | awk '{ print $0 }' | sort -k2 | head -1 | c
}
alias goto=gotoD

我希望能够输入

goto directory_name d

并让函数搜索目录并cd到最近的目录 问题是,虽然找到的目录路径进入mycd,但它无法实际更改目录,并且简单地保留在同一目录中而没有任何错误。

非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:3)

每当您将命令放入管道时,都会强制该命令作为单独的进程执行。由于每个进程都有自己的当前目录,因此您最终只能更改一个进程的当前目录,而不是您输入的shell的当前目录。尝试实现gotoD,如下所示:

gotoD() {
  cd $(find -name $1 -type $2 | awk '{ print $0 }' | sort -k2 | head -1)
}

现在找到正确目录的逻辑仍在另一个进程中执行,但cd命令由主进程执行。

答案 1 :(得分:0)

设置正确的Bash选项:cdable_vars

您可能正在寻找正确的 shopt 选项来设置cdable_varsmanual page说:

  

cdable_vars

     

如果设置了此项,则假定cd builtin命令不是目录的参数是变量的名称,该变量的值是要更改的目录。

这简化了您的解决方案。例如:

shopt -s cdable_vars
goto=/etc
cd goto

但是,您可以使用脚本,函数或管道将目录名称分配给 goto ,而不是将静态目录分配给goto。