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

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

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


当前回答

只需运行:

cd /home/xxx/yyy && command_you_want

其他回答

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

. script_name

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

source script_name

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

您不需要脚本,只需设置正确的选项并创建环境变量即可。

shopt -s cdable_vars

在~/.bashrc中,允许cd到环境变量的内容。

创建这样的环境变量:

export myjava="/home/tree/projects/java"

您可以使用:

cd myjava

其他替代方案。

您可以执行以下操作:

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

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

例子:

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

要制作一个bash脚本,该脚本将cd到select目录:

创建脚本文件

#!/bin/sh
# file : /scripts/cdjava
#
cd /home/askgelal/projects/java

然后在启动文件中创建别名。

#!/bin/sh
# file /scripts/mastercode.sh
#
alias cdjava='. /scripts/cdjava'

我创建了一个启动文件,在其中转储所有别名和自定义函数。然后我将这个文件源到我的.bashrc中,以便在每次启动时设置它。

例如,创建主别名/函数文件:/scripts/mastercode.sh(将别名放在此文件中。)

然后在.bashrc文件的末尾:

source /scripts/mastercode.sh


现在很容易cd到java目录,只需键入cdjava就可以了。

脚本中的cd在技术上起作用,因为它改变了运行脚本的shell的目录,但这是一个独立于交互式shell的过程。

解决这个问题的Posix兼容方法是定义shell过程,而不是shell调用的命令脚本。

jhome () {
  cd /home/tree/projects/java
}

您只需键入或将其放入各种shell启动文件之一即可。