我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
当前回答
您不需要脚本,只需设置正确的选项并创建环境变量即可。
shopt -s cdable_vars
在~/.bashrc中,允许cd到环境变量的内容。
创建这样的环境变量:
export myjava="/home/tree/projects/java"
您可以使用:
cd myjava
其他替代方案。
其他回答
当您启动shell脚本时,它会运行该shell的一个新实例(/bin/bash)。因此,脚本只需启动一个shell,更改目录并退出。换句话说,shell脚本中的cd(和其他此类命令)不会影响或访问启动它们的shell。
您可以使用。要在当前shell环境中执行脚本,请执行以下操作:
. script_name
或者可选地,其更可读但特定于外壳的别名源:
source script_name
这避免了子shell,并允许任何变量或内置(包括cd)影响当前shell。
在~/.bash_profile文件中。添加下一个函数
move_me() {
cd ~/path/to/dest
}
重新启动终端,您可以键入
move_me
您将被移动到目标文件夹。
您可以组合别名和脚本,
alias proj="cd \`/usr/bin/proj !*\`"
前提是脚本回显目标路径。请注意,这些是脚本名称周围的反引号
例如,您的脚本可以是
#!/bin/bash
echo /home/askgelal/projects/java/$1
这种技术的优点是,脚本可以接受任意数量的命令行参数,并发出由可能复杂的逻辑计算的不同目的地。
cd在脚本的shell中完成。当脚本结束时,shell退出,然后您将留在原来的目录中。“源”脚本,不要运行它。而是:
./myscript.sh
do
. ./myscript.sh
(请注意脚本名称前的点和空格。)