我尝试为我在shell脚本编写过程中经常使用的路径设置“别名”。我尝试了一些方法,但是失败了:
myFold="~/Files/Scripts/Main"
cd myFold
bash: cd: myFold: No such file or directory
我该如何运作?
但是,cd ~/Files/Scripts/Main
可行。
Answers:
由于它是环境变量(别名在中具有不同的定义bash
),因此您需要使用类似以下内容的值对其进行评估:
cd "${myFold}"
要么:
cp "${myFold}/someFile" /somewhere/else
但是实际上,如果您只想轻松切换到该目录,则可以创建一个真实的别名(在bash
诸如的启动文件之一中.bashrc
),这样我可以更容易地保存击键:
alias myfold='cd ~/Files/Scripts/Main'
然后,您可以使用(不使用cd
):
myfold
要摆脱定义,请使用unalias
。以下记录显示了所有这些操作:
pax> cd ; pwd ; ls -ald footy
/home/pax
drwxr-xr-x 2 pax pax 4096 Jul 28 11:00 footy
pax> footydir=/home/pax/footy ; cd "$footydir" ; pwd
/home/pax/footy
pax> cd ; pwd
/home/pax
pax> alias footy='cd /home/pax/footy' ; footy ; pwd
/home/pax/footy
pax> unalias footy ; footy
bash: footy: command not found
in one of the bash startup files like .bashrc
。将别名放入合适的启动文件中将确保该别名可用于所有会话。
有一个shell选项cdable_vars
:
cdable_vars
如果设置了此参数,则将cd
内置命令的非目录参数假定为变量的名称,该变量的值是要更改的目录。
您可以将其添加到您的.bashrc
:
shopt -s cdable_vars
export myFold=$HOME/Files/Scripts/Main
请注意,我已将波浪号替换为$HOME
;;引号防止波浪号扩展,Bash会抱怨没有目录~/Files/Scripts/Main
。
现在,您可以按以下方式使用它:
cd myFold
没有$
必需的。实际上,这就是要点,如其他答案所示,cd "$myFold"
该方法无需使用shell选项。cd myFold
如果其中的路径myFold
包含空格,也不需要引用,则也可以使用。
这通常甚至可以与制表符自动补全一起使用,因为它会检查是否设置了该_cd
功能–但并非每个实现都以相同的方式进行操作,因此您可能必须再次从中获取源代码(或编辑以设置shell选项)。bash_completion
cdable_vars
bash_completion
.bashrc
/etc/profile
其他外壳程序具有类似的选项,例如Zsh(cdablevars
)。
setopt cdablevars
看起来可能是这样,但是我一点都不了解zsh。
cdable_vars
cd
bash-completion使用_cd
函数(complete -o nospace -F _cd cd
)所提供的完成。添加-v
它(完成变量)是可行的,但是会产生不希望有的副作用-对我来说,当我选择完成时,它显示了我的完整环境。
也许最好使用链接
符号或软链接(文件或目录,更灵活且可自我记录)
# Source Link
ln -s /home/jake/doc/test/2000/something /home/jake/xxx
硬链接(仅文件,灵活性较差且无法自我记录)
# Source Link
ln /home/jake/doc/test/2000/something /home/jake/xxx
提示:如果您不需要在家里看到链接,可以以一个点开始。; 那么默认情况下它将被隐藏,然后您可以像访问它
cd ~/.myHiddelLongDirLink
首先,您需要删除引号:
bashboy@host:~$ myFolder=~/Files/Scripts/Main
用引号引起的shell不能将波浪号扩展为它作为$HOME
目录的特殊含义。
然后,您可以$myFolder
在环境中使用shell变量:
bashboy@host:~$ cd $myFolder
bashboy@host:~/Files/Scripts/Main$
要创建别名,您需要定义别名:
alias myfolder="cd $myFolder"
然后,您可以将此类命令视为:
bashboy@host:~$ myFolder
bashboy@host:~/Files/Scripts/Main$
export
。
.bashrc
使用的资源文件或您使用的任何资源文件中对其进行定义,并且将在直接shell中定义它,而不是在shell脚本中定义它。
将以下行放在您的myscript中
set myFold = '~/Files/Scripts/Main'
在终端使用
source myscript
cd $myFold