我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
我正在尝试编写一个小脚本,将当前目录更改为我的项目目录:
#!/bin/bash
cd /home/tree/projects/java
我将此文件保存为proj,使用chmod添加了执行权限,并将其复制到/usr/bin。当我呼叫它时:proj,它什么都不做。我做错了什么?
当前回答
代替将脚本文件和cd执行到特定文件夹,
我们可以通过以下方式实现:
源或。特定shell脚本别名cd命令定义一个函数ant cd to folder
示例:
. script
# or
source script
alias ghqc='cd $(ghq root)/$(ghq list | fzf)'
ghqc() {
cd $(ghq root)/$1
}
其他回答
如果您使用鱼作为外壳,最好的解决方案是创建一个函数。例如,给定原始问题,您可以复制下面的4行并将它们粘贴到fish命令行中:
function proj
cd /home/tree/projects/java
end
funcsave proj
这将创建函数并保存以供以后使用。如果项目发生更改,只需使用新路径重复该过程。
如果愿意,可以通过执行以下操作手动添加函数文件:
nano ~/.config/fish/functions/proj.fish
并输入文本:
function proj
cd /home/tree/projects/java
end
最后按ctrl+x退出,然后按y返回保存更改。
(注意:使用funcsave的第一个方法为您创建proj.fish文件)。
你可以结合Adam&Greg的别名和圆点方法,做出更具活力的东西-
alias project=". project"
现在运行项目别名将在当前shell中执行项目脚本,而不是子shell。
Shell脚本在子Shell中运行,每个子Shell都有自己的当前目录的概念。cd成功了,但是一旦子Shell退出,你就回到了交互式Shell中,没有任何改变。
解决此问题的一种方法是改用别名:
alias proj="cd /home/tree/projects/java"
当您启动shell脚本时,它会运行该shell的一个新实例(/bin/bash)。因此,脚本只需启动一个shell,更改目录并退出。换句话说,shell脚本中的cd(和其他此类命令)不会影响或访问启动它们的shell。
我执行了以下操作:
创建名为case的文件
将以下内容粘贴到文件中:
#!/bin/sh
cd /home/"$1"
保存它,然后:
chmod +x case
我还在我的.bashrc中创建了一个别名:
alias disk='cd /home/; . case'
现在,当我键入:
case 12345
实际上,我正在键入:
cd /home/12345
您可以在“case”之后键入任何文件夹:
case 12
case 15
case 17
这就像键入:
cd /home/12
cd /home/15
cd /home/17
分别地
在我的情况下,路径要长得多——这些人用前面的~信息总结了这一点。