linux别名放在哪个目录,关于linux:如何为长路径制作“别名”?

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

谢谢。这样可行。我只尝试了别名myfold ='?/ some / path'和cd myfold。我收到一个错误 - 没有这样的目录。为什么?此外,是否可以"取消分配"别名变量?

myfold ='?/ some / path'cd"$ myfold"失败。为什么?

@bashboy,可能是因为你没有这个名字的目录。 ?/ some / path就是一个例子,你应该替换你想要使用的实际路径。我将更改它以使用您的示例目录,以便更清楚。至于如何取消分配别名,请使用unalias命令。我还用成绩单更新了答案,包括使用该命令。

您将如何在不同的终端会话中保留此别名?当我打开一个新选项卡并尝试使用此别名时,它不起作用。

@goldisfine,请参阅我的括号in one of the bash startup files like .bashrc。将别名放入合适的启动文件将确保它可用于所有会话。

我不认为这回答了这个问题;它仅针对cd。如果用户想要mv sourcedir/filename reallylongpath怎么办?

@Will,我想你会发现第一段已经涵盖了这一点。我会澄清一下。

有一个shell选项cdable_vars:

cdable_vars

If this is set, an argument to the cd builtin

command that is not a directory is assumed to be the name of a

variable whose value is the directory to change to.

您可以将其添加到.bashrc:

shopt -s cdable_vars

export myFold=$HOME/Files/Scripts/Main

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

现在你可以使用如下:

cd myFold

不需要$。这就是重点,实际上如其他答案所示,cd"$myFold"没有shell选项。如果myFold中的路径包含空格,则无法引用,cd myFold也可以使用。

这通常甚至适用于选项卡自动完成,因为bash_completion中的_cd函数检查是否设置了cdable_vars但是并非每个实现都以相同的方式执行它,因此您可能必须在.bashrc中再次获取bash_completion (或编辑/etc/profile以设置shell选项)。

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

ZSH有相同的这个吗?

@RyanStull setopt cdablevars看起来可能是,但我根本不知道zsh。

@JohnMee我将回滚你的编辑,因为a)zsh中的选项被调用(没有下划线)b)标记为Bash的问题和c)我链接到Bash手册。不过,我会添加一个段落来提及其他炮弹。

@JohnMee我找不到csh或tcsh的选项,它叫什么?

这么好的答案!非常感谢cdable_vars

但cdable_vars并没有让我能够执行其他命令,例如ls

@MuhammadYusuf你是什么意思?你想做什么?

@BenjaminW。我想拥有一个目录的别名,这样我就可以cd,ls,mkdir ......以及所有需要的操作,但cdable_vars只能让我能够进入别名目录

@MuhammadYusuf是的,它只是cd的别名。我不确定你在Bash中寻找的那种全局别名是否可行。

也许最好使用链接

软链接

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

#      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 =

现在你将能够cd ~。要使其永久添加到您的bashrc脚本。

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

这应该是正确的答案。

首先,您需要删除引号:

bashboy@host:~$myFolder=~/Files/Scripts/Main

引号阻止shell将波浪号扩展为其作为$HOME目录的特殊含义。

然后,您可以使用$myFolder 环境 strike>一个shell变量:

bashboy@host:~$cd $myFolder

bashboy@host:~/Files/Scripts/Main$

要创建别名,您需要定义别名:

alias myfolder="cd $myFolder"

然后,您可以将此类视为命令:

bashboy@host:~$myFolder

bashboy@host:~/Files/Scripts/Main$

除非你export,否则它实际上不是一个环境变量。

@KeithThompson好的,它只是一个shell变量。但是,您不希望导出它,因为您不希望它可能影响子进程。您可以在.bashrc或您使用的任何资源文件中以这种方式定义它,它将在直接shell中定义,但不在shell脚本中定义。

我更喜欢这种解决方案,因为它适用于自动完成

首先,您需要$访问"myFold"的值才能使问题中的代码工作:

cd"$myFold"

要简化此操作,请在~/.bashrc中创建别名:

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

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

source ~/.bashrc

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

cdmain

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

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

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

cp some_file.txt ~/myFold

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

一个缺点:如果您cd myFold然后pwd,它将显示您在myFold中。这对我来说是一个交易破坏者,因为具有p4源代码控制的相对命令取决于当前目录。

@ User5910 - 使用pwd -P

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

myScripts="~/Files/Scripts/Main"

alias myScripts="cd $myScripts"

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

IHTH

将以下行放在myscript中

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

在终端使用

source myscript

cd $myFold

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值