[英]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.