如何做一个“别名”的漫长道路?
我试图为shell脚本经常使用的path创build一个“别名”。 我尝试了一些,但失败了:
myFold="~/Files/Scripts/Main" cd myFold bash: cd: myFold: No such file or directory
我如何使它工作?
不过, cd ~/Files/Scripts/Main
作品。
由于它是一个环境variables(别名在bash
有一个不同的定义),所以你需要用如下的东西来评估它:
cd "${myFold}"
要么:
cp "${myFold}/someFile" /somewhere/else
但实际上,如果您只是想轻松地切换到该目录,并创build一个真正的别名(在.bashrc
之类的bash
启动文件中),那么我可以更轻松地保存按键:
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
有一个shell选项cdable_vars
:
cdable_vars
如果设置了这个参数,那么cd
builtin命令不是一个目录的参数被认为是一个variables的名字,其值是要改变的目录。
你可以把这个添加到你的.bashrc
:
shopt -s cdable_vars export myFold=$HOME/Files/Scripts/Main
请注意,我用$HOME
代替了代字号。 引号防止代字符扩展和Bash会抱怨没有目录~/Files/Scripts/Main
。
现在你可以使用这个如下:
cd myFold
不需要$
。 实际上就是这样 – 如其他答案所示, cd "$myFold"
在没有shell选项的情况下工作。 如果myFold
中的path包含空格,则不需要引用cd myFold
。
因为_cd
中的_cd
函数检查是否设置了cdable_vars
– 但是并不是每个实现都以相同的方式执行,所以通常甚至可以使用tab自动完成工作,因此您可能必须再次在您的.bashrc
编译bash_completion
(或编辑/etc/profile
设置shell选项)。
首先,您需要删除引号:
bashboy@host:~$ myFolder=~/Files/Scripts/Main
引号可以防止shell将代字符扩展为$HOME
目录的特殊含义。
然后你可以使用$myFolder
一个shellvariables的环境 :
bashboy@host:~$ cd $myFolder bashboy@host:~/Files/Scripts/Main$
要创build别名 ,您需要定义别名:
alias="cd $myFolder"
然后你可以像这样处理一个命令:
bashboy@host:~$ myFolder bashboy@host:~/Files/Scripts/Main$
首先,您需要$
来访问“myFold”的值,使问题中的代码工作:
cd "$myFold"
为了简化这个,你在~/.bashrc
创build一个别名:
alias cdmain='cd ~/Files/Scripts/Main'
不要忘了一次性发送.bashrc
,以使别名在当前bash会话中可用:
source ~/.bashrc
现在您可以使用以下命令切换到文件夹:
cdmain
但是一个dir的实际别名也是可以的,试试
myScripts="~/Files/Scripts/Main" alias myScripts="cd $myScripts"
这样你就有了一个通用的命名约定(对于每个dir / alias对),如果你需要从当前目录拷贝到myScripts,你不必考虑它。
IHTH
你可以将你想要的任何path添加到你的bash的hashtable中:
hash -d <CustomName>=<RealPath>
现在你将能够cd ~<CustomName>
。 为了使其永久添加到您的bashrc脚本。
请注意,这个散列表的目的是为bash提供一个caching,而不需要每次执行一个命令都要search内容,因此这个表将被清除到使caching无效的事件上,例如修改$PATH
。