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

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

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


当前回答

当您启动shell脚本时,它会运行该shell的一个新实例(/bin/bash)。因此,脚本只需启动一个shell,更改目录并退出。换句话说,shell脚本中的cd(和其他此类命令)不会影响或访问启动它们的shell。

其他回答

我通过使用获得了代码<您的文件名>

./<您的文件名>不起作用,因为它不会更改终端中的目录,只是更改特定于该脚本的目录。

这是我的计划

#!/bin/bash 
echo "Taking you to eclipse's workspace."
cd /Developer/Java/workspace

这是我的终端

nova:~ Kael$ 
nova:~ Kael$ . workspace.sh
Taking you to eclipe's workspace.
nova:workspace Kael$ 

虽然获取要运行的脚本是一种解决方案,但您应该知道,该脚本可以直接修改当前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目录书签。

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

1 -

$纳米~/巴沙尔克

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

2-

$source~/.bashrc

3 -

$switchp java

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

希望这有帮助!

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

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

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

要快速导航目录,有$CDPATH、cdargs和自动生成别名的方法

http://jackndempsey.blogspot.com/2008/07/cdargs.html

http://muness.blogspot.com/2008/06/lazy-bash-cd-aliaes.html

https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5827311.html