我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:

#!/bin/bash
cd /home/tree/projects/java

我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?


当前回答

您可以组合别名和脚本,

alias proj="cd \`/usr/bin/proj !*\`"

前提是脚本回显目标路径。请注意,这些是脚本名称周围的反引号

例如,您的脚本可以是

#!/bin/bash
echo /home/askgelal/projects/java/$1

这种技术的优点是,脚本可以接受任意数量的命令行参数,并发出由可能复杂的逻辑计算的不同目的地。

其他回答

注意讨论如何设置父进程的工作目录?

它包含一些粗俗的答案,例如。https://stackoverflow.com/a/2375174/755804(通过gdb更改父进程目录,不要这样做)和https://stackoverflow.com/a/51985735/755804(将cd目录名注入父进程的输入流的命令tailcd;理想情况下,它应该是bash的一部分,而不是黑客)

我有一个名为p的简单bash脚本来管理目录更改ongithub.com/godzilla/bash-stuff只需将脚本放在本地bin目录(/usr/local/bin)中并将

alias p='. p'

在你的.bashrc中

代替将脚本文件和cd执行到特定文件夹,

我们可以通过以下方式实现:

源或。特定shell脚本别名cd命令定义一个函数ant cd to folder

示例:

. script
# or
source script
alias ghqc='cd $(ghq root)/$(ghq list | fzf)'
ghqc() {
  cd $(ghq root)/$1
}

它只更改脚本本身的目录,而当前目录保持不变。

您可能希望改用符号链接。它允许您创建文件或目录的“快捷方式”,因此您只需键入cd my project之类的内容。

Shell脚本在子Shell中运行,每个子Shell都有自己的当前目录的概念。cd成功了,但是一旦子Shell退出,你就回到了交互式Shell中,没有任何改变。

解决此问题的一种方法是改用别名:

alias proj="cd /home/tree/projects/java"