我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
当前回答
虽然获取要运行的脚本是一种解决方案,但您应该知道,该脚本可以直接修改当前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目录书签。
其他回答
你没做错什么!您已经更改了目录,但仅在运行脚本的子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'
应该工作在上面的行中,设置了新文件夹路径
我有一个名为p的简单bash脚本来管理目录更改ongithub.com/godzilla/bash-stuff只需将脚本放在本地bin目录(/usr/local/bin)中并将
alias p='. p'
在你的.bashrc中
如果您使用鱼作为外壳,最好的解决方案是创建一个函数。例如,给定原始问题,您可以复制下面的4行并将它们粘贴到fish命令行中:
function proj
cd /home/tree/projects/java
end
funcsave proj
这将创建函数并保存以供以后使用。如果项目发生更改,只需使用新路径重复该过程。
如果愿意,可以通过执行以下操作手动添加函数文件:
nano ~/.config/fish/functions/proj.fish
并输入文本:
function proj
cd /home/tree/projects/java
end
最后按ctrl+x退出,然后按y返回保存更改。
(注意:使用funcsave的第一个方法为您创建proj.fish文件)。
Shell脚本在子Shell中运行,每个子Shell都有自己的当前目录的概念。cd成功了,但是一旦子Shell退出,你就回到了交互式Shell中,没有任何改变。
解决此问题的一种方法是改用别名:
alias proj="cd /home/tree/projects/java"