如何做一个“别名”的漫长道路?

我试图为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