我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
当前回答
您可以组合别名和脚本,
alias proj="cd \`/usr/bin/proj !*\`"
前提是脚本回显目标路径。请注意,这些是脚本名称周围的反引号
例如,您的脚本可以是
#!/bin/bash
echo /home/askgelal/projects/java/$1
这种技术的优点是,脚本可以接受任意数量的命令行参数,并发出由可能复杂的逻辑计算的不同目的地。
其他回答
我通过使用获得了代码<您的文件名>
./<您的文件名>不起作用,因为它不会更改终端中的目录,只是更改特定于该脚本的目录。
这是我的计划
#!/bin/bash
echo "Taking you to eclipse's workspace."
cd /Developer/Java/workspace
这是我的终端
nova:~ Kael$
nova:~ Kael$ . workspace.sh
Taking you to eclipe's workspace.
nova:workspace Kael$
当您启动shell脚本时,它会运行该shell的一个新实例(/bin/bash)。因此,脚本只需启动一个shell,更改目录并退出。换句话说,shell脚本中的cd(和其他此类命令)不会影响或访问启动它们的shell。
你没做错什么!您已经更改了目录,但仅在运行脚本的子shell中更改。
您可以使用“dot”命令在当前进程中运行脚本:
. proj
但我更喜欢Greg的建议,在这个简单的案例中使用别名。
我必须在tcsh中工作,我知道这不是一个优雅的解决方案,但例如,如果我必须将文件夹更改为一个单词不同的路径,那么整个事情可以在别名中完成
a alias_name 'set a = `pwd`; set b = `echo $a | replace "Trees" "Tests"` ; cd $b'
如果路径总是固定的
a alias_name2 'cd path/you/always/need'
应该工作在上面的行中,设置了新文件夹路径
杰里米·鲁滕(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