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

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

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


当前回答

您可以组合别名和脚本,

alias proj="cd \`/usr/bin/proj !*\`"

前提是脚本回显目标路径。请注意,这些是脚本名称周围的反引号

例如,您的脚本可以是

#!/bin/bash
echo /home/askgelal/projects/java/$1

这种技术的优点是,脚本可以接受任意数量的命令行参数,并发出由可能复杂的逻辑计算的不同目的地。

其他回答

正如其他答案中所解释的,您已经更改了目录,但仅在运行脚本的子shell中更改。这不会影响父shell。

一种解决方案是使用bash函数而不是bash脚本(sh);通过将bash脚本代码放入函数中。这使得该函数可以作为命令使用,然后,它将在没有子进程的情况下执行,因此任何cd命令都会影响调用者shell。

Bash函数:

bash概要文件的一个功能是存储可以在终端或bash脚本中运行的自定义函数,与运行应用程序/命令的方式相同,这也可以用作长命令的快捷方式。

为了使您的功能更高效,您需要在多个文件的末尾复制您的功能

/home/user/.bashrc
/home/user/.bash_profile
/root/.bashrc
/root/.bash_profile

您可以使用sudo kwrite/home/user/.bashrc/home/user/.bash_profile/root/.bashrc/root/.bash_profile快速编辑/创建这些文件

如何:

将bash脚本代码复制到bash配置文件末尾的新函数中,然后重新启动终端,然后就可以运行cdd或编写的任何函数。

脚本示例

正在制作cd的快捷方式。。使用cdd

cdd() {
  cd ..
}

ls快捷方式

ll() {
  ls -l -h
}

ls快捷方式

lll() {
  ls -l -h -a
}

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

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

这是我的计划

#!/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$ 

您可以组合别名和脚本,

alias proj="cd \`/usr/bin/proj !*\`"

前提是脚本回显目标路径。请注意,这些是脚本名称周围的反引号

例如,您的脚本可以是

#!/bin/bash
echo /home/askgelal/projects/java/$1

这种技术的优点是,脚本可以接受任意数量的命令行参数,并发出由可能复杂的逻辑计算的不同目的地。

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

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

cdproj

or

cdproj project_name

这是函数定义。

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

别忘了获取.bash_profile

杰里米·鲁滕(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