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

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

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


当前回答

您可以使用运算符&&:

cd myDirectory&&ls

其他回答

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

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

cdproj

or

cdproj project_name

这是函数定义。

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

别忘了获取.bash_profile

您可以执行以下操作:

#!/bin/bash
cd /your/project/directory
# start another shell and replacing the current
exec /bin/bash

编辑:这也可以是“虚线”,以防止创建后续的壳。

例子:

. ./previous_script  (with or without the first line)

您可以使用。要在当前shell环境中执行脚本,请执行以下操作:

. script_name

或者可选地,其更可读但特定于外壳的别名源:

source script_name

这避免了子shell,并允许任何变量或内置(包括cd)影响当前shell。

这应该是你想要的。更改到感兴趣的目录(从脚本中),然后生成一个新的bash shell。

#!/bin/bash

# saved as mov_dir.sh
cd ~/mt/v3/rt_linux-rt-tools/
bash

如果你运行这个,它会把你带到感兴趣的目录,当你退出它时,它会让你回到原来的位置。

root@intel-corei7-64:~# ./mov_dir.sh

root@intel-corei7-64:~/mt/v3/rt_linux-rt-tools# exit
root@intel-corei7-64:~#

当您退出时,这甚至会将您带回到原始目录(CTRL+d)

这是一个老问题,但我真的很惊讶,我在这里没有看到这个技巧

您可以使用

export PWD=the/path/you/want

无需创建子外壳或使用别名。

请注意,您有责任确保/path/you/want存在。