我试图为shell脚本中经常使用的路径创建一个“别名”。我尝试了一些,但失败了:如何为长路径创建“别名”?
myFold="~/Files/Scripts/Main"
cd myFold
bash: cd: myFold: No such file or directory
我该如何使它工作?
但是,cd ~/Files/Scripts/Main
的作品。
我试图为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
但实际上,我发现它更容易,如果您只是想轻松切换到该目录,可以创建一个真实其他S(像.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
首先,你需要$
访问“myFold”的值,使在问题的工作代码:你在~/.bashrc
创建别名
cd "$myFold"
为了简化:
alias cdmain='cd ~/Files/Scripts/Main'
不要忘记一次发送.bashrc
以使别名在当前bash会话中可用:
source ~/.bashrc
现在你可以使用切换到文件夹:
cdmain
但对于一个目录的实际别名也有可能,尽量
myScripts="~/Files/Scripts/Main"
alias myScripts="cd $myScripts"
这种方式,你有一个共同的命名约定(对于每个目录/别名对),并且如果您需要将当前目录中的内容复制到myScripts,则不必考虑它。
IHTH
首先,你需要删除引号:
[email protected]:~$ myFolder=~/Files/Scripts/Main
引号阻止shell扩展波浪号的特殊意义成为您的$HOME
目录。
然后,您可以使用$myFolder
环境
shell变量:
[email protected]:~$ cd $myFolder
[email protected]:~/Files/Scripts/Main$
若要使别名,您需要定义别名:
然后可以把这个有点像命令:
[email protected]:~$ myFolder
[email protected]:~/Files/Scripts/Main$
它实际上并不是一个* environment *变量,除非您将其导出。 –
@KeithThompson好吧,它只是一个_shell变量_。但是,您不想导出它,因为您不希望它可能影响子进程。您可以用'.bashrc'或其他任何资源文件来定义它,它将在直接shell中定义,而不是在shell脚本中定义。 –
我更喜欢这种解决方案,因为它适用于自动完成 – Vassilis
您可以添加任何你想要的路径,你的bash的哈希表:
hash -d <CustomName>=<RealPath>
现在,您将能够cd ~<CustomName>
。使其永久添加到您的bashrc脚本。
请注意,这个散列表旨在为bash提供一个缓存,而不必在每次执行命令时都搜索内容,因此这个表将在导致缓存无效的事件上被清除,例如,修改$PATH
。
有一个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
中的路径包含空格,不需要引用。
这通常即使有标签自动完成在bash_completion
检查_cd
功能工作,如果cdable_vars
设置–但不是每一个实施做它以同样的方式,所以你可能在你的.bashrc
再次源bash_completion
(或编辑/etc/profile
到设置shell选项)。
另一种选择是使用符号链接。即:
ln -s ~/Files/Scripts/Main ~/myFold
之后,你可以执行操作~/myFold
,如:
cp some_file.txt ~/myFold
这将将文件放在~/Files/Scripts/Main
。您可以随时使用rm ~/myFold
删除符号链接,这将保留原始目录。
谢谢。这样可行。我只尝试了别名myfold ='〜/ some/path'和cd myfold。我得到一个错误 - 没有这样的目录。为什么?另外,是否有可能“取消”一个别名变量? – bashboy
myfold ='〜/ some/path'cd“$ myfold”失败。为什么? – bashboy
@bashboy,可能是因为你没有这个名字的目录。 〜/ some/path是一个例子,你应该替换你想要使用的_actual_路径。我会将其更改为使用示例目录,以便更清晰。至于如何取消分配别名,可以使用unalias命令。我还用一份成绩单更新了答案,包括使用该命令。 – paxdiablo