我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
当前回答
最后使用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
其他回答
您可以执行以下操作:
#!/bin/bash
cd /your/project/directory
# start another shell and replacing the current
exec /bin/bash
编辑:这也可以是“虚线”,以防止创建后续的壳。
例子:
. ./previous_script (with or without the first line)
在我的具体案例中,我需要多次更改同一目录。所以在我的.bashrc(我使用ubuntu)上,我添加了
1 -
$纳米~/巴沙尔克
function switchp
{
cd /home/tree/projects/$1
}
2-
$source~/.bashrc
3 -
$switchp java
它将直接执行:cd/home/tree/projects/java
希望这有帮助!
杰里米·鲁滕(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
你可以结合Adam&Greg的别名和圆点方法,做出更具活力的东西-
alias project=". project"
现在运行项目别名将在当前shell中执行项目脚本,而不是子shell。
要快速导航目录,有$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