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

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

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


当前回答

这将Serge的回答与David的不相关回答结合起来。它更改目录,然后启动用户的默认shell,而不是强制使用bash shell。然而,它需要getent和/etc/passwd来检测默认shell。

#!/usr/bin/env bash
cd desired/directory
USER_SHELL=$(getent passwd <USER> | cut -d : -f 7)
$USER_SHELL

当然,这仍然具有创建嵌套外壳的相同缺陷。

其他回答

在~/.bash_profile文件中。添加下一个函数

move_me() {
    cd ~/path/to/dest
}

重新启动终端,您可以键入

move_me 

您将被移动到目标文件夹。

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

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

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

它只更改脚本本身的目录,而当前目录保持不变。

您可能希望改用符号链接。它允许您创建文件或目录的“快捷方式”,因此您只需键入cd my project之类的内容。

要制作一个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就可以了。

要快速导航目录,有$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