我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:

#!/bin/bash
cd /home/tree/projects/java

我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?


当前回答

Shell脚本在子Shell中运行,每个子Shell都有自己的当前目录的概念。cd成功了,但是一旦子Shell退出,你就回到了交互式Shell中,没有任何改变。

解决此问题的一种方法是改用别名:

alias proj="cd /home/tree/projects/java"

其他回答

在我的具体案例中,我需要多次更改同一目录。所以在我的.bashrc(我使用ubuntu)上,我添加了

1 -

$纳米~/巴沙尔克

 function switchp
 {
    cd /home/tree/projects/$1
 }

2-

$source~/.bashrc

3 -

$switchp java

它将直接执行:cd/home/tree/projects/java

希望这有帮助!

您可以在.bash_profile中创建一个如下所示的函数,它将顺利工作。

以下函数接受一个可选参数,该参数是一个项目。例如,您可以运行

cdproj

or

cdproj project_name

这是函数定义。

cdproj(){
    dir=/Users/yourname/projects
    if [ "$1" ]; then
      cd "${dir}/${1}"
    else
      cd "${dir}"
    fi
}

别忘了获取.bash_profile

我执行了以下操作:

创建名为case的文件

将以下内容粘贴到文件中:

#!/bin/sh

cd /home/"$1"

保存它,然后:

chmod +x case

我还在我的.bashrc中创建了一个别名:

alias disk='cd /home/; . case'

现在,当我键入:

case 12345

实际上,我正在键入:

cd /home/12345

您可以在“case”之后键入任何文件夹:

case 12

case 15

case 17

这就像键入:

cd /home/12

cd /home/15

cd /home/17

分别地

在我的情况下,路径要长得多——这些人用前面的~信息总结了这一点。

虽然获取要运行的脚本是一种解决方案,但您应该知道,该脚本可以直接修改当前shell的环境。此外,无法再传递参数。

另一种方法是将脚本实现为bash中的函数。

function cdbm() {
  cd whereever_you_want_to_go
  echo "Arguments to the functions were $1, $2, ..."
}

自动跳转使用此技术:http://github.com/joelthelion/autojump/wiki为您提供学习shell目录书签。

杰里米·鲁滕(Jeremy Ruten)使用符号链接的想法引发了一个没有任何其他答案的想法。使用:

CDPATH=:$HOME/projects

前导结肠很重要;这意味着如果当前目录中有一个目录“dir”,那么“cd dir”将更改为该目录,而不是跳到其他位置。使用如图所示的值设置,可以执行以下操作:

cd java

而且,如果当前目录中没有名为java的子目录,那么它将直接将您带到$HOME/projects/java-没有别名、没有脚本、没有可疑的exec或dot命令。

我的$HOME是/Users/jleffler;我的$CDPATH是:

:/Users/jleffler:/Users/jleffler/mail:/Users/jleffler/src:/Users/jleffler/src/perl:/Users/jleffler/src/sqltools:/Users/jleffler/lib:/Users/jleffler/doc:/Users/jleffler/work