我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
当前回答
你可以结合Adam&Greg的别名和圆点方法,做出更具活力的东西-
alias project=". project"
现在运行项目别名将在当前shell中执行项目脚本,而不是子shell。
其他回答
如果以反斜杠结束行,则可以在同一子shell中执行某些行。
cd somedir; \
pwd
要制作一个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就可以了。
您可以执行以下操作:
#!/bin/bash
cd /your/project/directory
# start another shell and replacing the current
exec /bin/bash
编辑:这也可以是“虚线”,以防止创建后续的壳。
例子:
. ./previous_script (with or without the first line)
注意讨论如何设置父进程的工作目录?
它包含一些粗俗的答案,例如。https://stackoverflow.com/a/2375174/755804(通过gdb更改父进程目录,不要这样做)和https://stackoverflow.com/a/51985735/755804(将cd目录名注入父进程的输入流的命令tailcd;理想情况下,它应该是bash的一部分,而不是黑客)
您不需要脚本,只需设置正确的选项并创建环境变量即可。
shopt -s cdable_vars
在~/.bashrc中,允许cd到环境变量的内容。
创建这样的环境变量:
export myjava="/home/tree/projects/java"
您可以使用:
cd myjava
其他替代方案。