繁体   English   中英

如何为长路径制作“别名”?

[英]How to make an “alias” for a long path?

我试图为shell脚本经常使用的路径制作一个“别名”。 我试了一下,但失败了:

myFold="~/Files/Scripts/Main"
cd myFold

bash: cd: myFold: No such file or directory

我如何使其工作?
但是, cd ~/Files/Scripts/Main工作。

由于它是一个环境变量(别名在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

有一个shell选项cdable_vars

cdable_vars
如果设置了此参数,则假定cd builtin命令不是目录的参数是变量的名称,该变量的值是要更改的目录。

你可以将它添加到你的.bashrc

shopt -s cdable_vars
export myFold=$HOME/Files/Scripts/Main

请注意,我用$HOME替换了代字号; 引号阻止波浪扩展和Bash会抱怨没有目录~/Files/Scripts/Main

现在你可以使用如下:

cd myFold

不需要$ 这就是重点,实际上 - 如其他答案所示, cd "$myFold"在没有shell选项的情况下工作。 如果myFold中的路径包含空格,不需要引号,则cd myFold也可以工作。

这通常即使有标签自动完成的工作_cd在功能bash_completion检查cdable_vars设置-但不是每一个实施做它以同样的方式,所以你可能不得不源bash_completion再出现在您.bashrc (或编辑/etc/profile ,以设置shell选项)。


其他shell有类似的选项,例如Zsh( cdablevars )。

也许最好使用链接

软链接

符号或软链接(文件或目录,更灵活和自我记录)

#      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

您可以将所需的任何路径添加到bash的哈希表中:

hash -d <CustomName>=<RealPath>

现在你可以cd ~<CustomName> 要使其永久添加到您的bashrc脚本。

请注意,此哈希表旨在为每次执行命令时不需要搜索内容的bash提供缓存,因此将在无效缓存的事件上清除此表,例如修改$PATH

首先,你需要$来访问“myFold”的值来使问题中的代码工作:

cd "$myFold"

为了简化这一点,您可以在~/.bashrc创建一个别名:

alias cdmain='cd ~/Files/Scripts/Main'

不要忘记一次使用.bashrc来使别名在当前的bash会话中变得可用:

source ~/.bashrc

现在您可以使用以下命令切换到该文件夹

cdmain

首先,您需要删除引号:

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$

另一种选择是使用符号链接。 即:

ln -s ~/Files/Scripts/Main ~/myFold

之后,您可以对~/myFold执行操作,例如:

cp some_file.txt ~/myFold

这将把文件放在~/Files/Scripts/Main 您可以随时使用rm ~/myFold删除符号链接,这将保留原始目录。

但是也可以使用dir的实际别名

 myScripts="~/Files/Scripts/Main"
 alias myScripts="cd $myScripts"

这样您就有了一个通用的命名约定(对于每个目录/别名对),如果您需要将当前目录中的某些内容复制到myScripts,则不必考虑它。

IHTH

将以下行放在myscript中

set myFold = '~/Files/Scripts/Main'

在终端使用

source myscript
cd $myFold

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM