我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
当前回答
要制作一个bash脚本,该脚本将cd到select目录:
创建脚本文件
#!/bin/sh # file : /scripts/cdjava # cd /home/askgelal/projects/java
然后在启动文件中创建别名。
#!/bin/sh # file /scripts/mastercode.sh # alias cdjava='. /scripts/cdjava'
我创建了一个启动文件,在其中转储所有别名和自定义函数。然后我将这个文件源到我的.bashrc中,以便在每次启动时设置它。
例如,创建主别名/函数文件:/scripts/mastercode.sh(将别名放在此文件中。)
然后在.bashrc文件的末尾:
source /scripts/mastercode.sh
现在很容易cd到java目录,只需键入cdjava就可以了。
其他回答
虽然获取要运行的脚本是一种解决方案,但您应该知道,该脚本可以直接修改当前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目录书签。
这应该是你想要的。更改到感兴趣的目录(从脚本中),然后生成一个新的bash shell。
#!/bin/bash
# saved as mov_dir.sh
cd ~/mt/v3/rt_linux-rt-tools/
bash
如果你运行这个,它会把你带到感兴趣的目录,当你退出它时,它会让你回到原来的位置。
root@intel-corei7-64:~# ./mov_dir.sh
root@intel-corei7-64:~/mt/v3/rt_linux-rt-tools# exit
root@intel-corei7-64:~#
当您退出时,这甚至会将您带回到原始目录(CTRL+d)
Shell脚本在子Shell中运行,每个子Shell都有自己的当前目录的概念。cd成功了,但是一旦子Shell退出,你就回到了交互式Shell中,没有任何改变。
解决此问题的一种方法是改用别名:
alias proj="cd /home/tree/projects/java"
您不需要脚本,只需设置正确的选项并创建环境变量即可。
shopt -s cdable_vars
在~/.bashrc中,允许cd到环境变量的内容。
创建这样的环境变量:
export myjava="/home/tree/projects/java"
您可以使用:
cd myjava
其他替代方案。
只需运行:
cd /home/xxx/yyy && command_you_want