我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
当前回答
最后使用exec bash
bash脚本在其当前环境或其儿童,但决不依赖其父母环境。
然而,这个问题经常被问到,因为在从另一个目录中执行bash脚本之后,人们希望留在某个目录中的(新的)bash提示符处。
如果是这种情况,只需在脚本末尾执行一个子bash实例:
#!/usr/bin/env bash
cd /home/tree/projects/java
echo -e '\nHit [Ctrl]+[D] to exit this child shell.'
exec bash
要返回到上一个父bash实例,请使用Ctrl+D。
使现代化
至少在更新版本的bash中,不再需要最后一行的exec。此外,可以使用$shell环境变量使脚本与任何首选的shell一起工作。然后得出:
#!/usr/bin/env bash
cd desired/directory
echo -e '\nHit [Ctrl]+[D] to exit this child shell.'
$SHELL
其他回答
Shell脚本在子Shell中运行,每个子Shell都有自己的当前目录的概念。cd成功了,但是一旦子Shell退出,你就回到了交互式Shell中,没有任何改变。
解决此问题的一种方法是改用别名:
alias proj="cd /home/tree/projects/java"
您可以在.bash_profile中创建一个如下所示的函数,它将顺利工作。
以下函数接受一个可选参数,该参数是一个项目。例如,您可以运行
cdproj
or
cdproj project_name
这是函数定义。
cdproj(){
dir=/Users/yourname/projects
if [ "$1" ]; then
cd "${dir}/${1}"
else
cd "${dir}"
fi
}
别忘了获取.bash_profile
虽然获取要运行的脚本是一种解决方案,但您应该知道,该脚本可以直接修改当前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目录书签。
在我的具体案例中,我需要多次更改同一目录。所以在我的.bashrc(我使用ubuntu)上,我添加了
1 -
$纳米~/巴沙尔克
function switchp
{
cd /home/tree/projects/$1
}
2-
$source~/.bashrc
3 -
$switchp java
它将直接执行:cd/home/tree/projects/java
希望这有帮助!
代替将脚本文件和cd执行到特定文件夹,
我们可以通过以下方式实现:
源或。特定shell脚本别名cd命令定义一个函数ant cd to folder
示例:
. script
# or
source script
alias ghqc='cd $(ghq root)/$(ghq list | fzf)'
ghqc() {
cd $(ghq root)/$1
}