我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
当前回答
杰里米·鲁滕(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
其他回答
正如其他答案中所解释的,您已经更改了目录,但仅在运行脚本的子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
}
你没做错什么!您已经更改了目录,但仅在运行脚本的子shell中更改。
您可以使用“dot”命令在当前进程中运行脚本:
. proj
但我更喜欢Greg的建议,在这个简单的案例中使用别名。
你可以结合Adam&Greg的别名和圆点方法,做出更具活力的东西-
alias project=". project"
现在运行项目别名将在当前shell中执行项目脚本,而不是子shell。
这是一个老问题,但我真的很惊讶,我在这里没有看到这个技巧
您可以使用
export PWD=the/path/you/want
无需创建子外壳或使用别名。
请注意,您有责任确保/path/you/want存在。
要快速导航目录,有$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