我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/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
其他回答
注意讨论如何设置父进程的工作目录?
它包含一些粗俗的答案,例如。https://stackoverflow.com/a/2375174/755804(通过gdb更改父进程目录,不要这样做)和https://stackoverflow.com/a/51985735/755804(将cd目录名注入父进程的输入流的命令tailcd;理想情况下,它应该是bash的一部分,而不是黑客)
我有一个名为p的简单bash脚本来管理目录更改ongithub.com/godzilla/bash-stuff只需将脚本放在本地bin目录(/usr/local/bin)中并将
alias p='. p'
在你的.bashrc中
要快速导航目录,有$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
虽然获取要运行的脚本是一种解决方案,但您应该知道,该脚本可以直接修改当前shell的环境。此外,无法再传递参数。
另一种方法是将脚本实现为bash中的函数。
function cdbm() {
cd whereever_you_want_to_go
echo "Arguments to the functions were $1, $2, ..."
}
自动跳转使用此技术:http://github.com/joelthelion/autojump/wiki为您提供学习shell目录书签。
它只更改脚本本身的目录,而当前目录保持不变。
您可能希望改用符号链接。它允许您创建文件或目录的“快捷方式”,因此您只需键入cd my project之类的内容。