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

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

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


当前回答

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

其他回答

这应该是你想要的。更改到感兴趣的目录(从脚本中),然后生成一个新的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)

你可以结合Adam&Greg的别名和圆点方法,做出更具活力的东西-

alias project=". project"

现在运行项目别名将在当前shell中执行项目脚本,而不是子shell。

最后使用exec bash

bash脚本在其当前环境或其儿童,但决不依赖其父母环境。

然而,这个问题经常被问到,因为在从另一个目录中执行bash脚本之后,人们希望留在某个目录中的(新的)bash提示符处。

如果是这种情况,只需在脚本末尾执行一个子bash实例:

#!/usr/bin/env bash
cd /home/tree/projects/java
echo -e '\nHit [Ctrl]+[D] to exit this child shell.'
exec bash

要返回到上一个父bash实例,请使用Ctrl+D。

使现代化

至少在更新版本的bash中,不再需要最后一行的exec。此外,可以使用$shell环境变量使脚本与任何首选的shell一起工作。然后得出:

#!/usr/bin/env bash
cd desired/directory
echo -e '\nHit [Ctrl]+[D] to exit this child shell.'
$SHELL

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

我执行了以下操作:

创建名为case的文件

将以下内容粘贴到文件中:

#!/bin/sh

cd /home/"$1"

保存它,然后:

chmod +x case

我还在我的.bashrc中创建了一个别名:

alias disk='cd /home/; . case'

现在,当我键入:

case 12345

实际上,我正在键入:

cd /home/12345

您可以在“case”之后键入任何文件夹:

case 12

case 15

case 17

这就像键入:

cd /home/12

cd /home/15

cd /home/17

分别地

在我的情况下,路径要长得多——这些人用前面的~信息总结了这一点。