2011-03-20 59 views
3

我知道可能没有简单的方法来做到这一点,但我想我可能会把它放在那里。我有一个目录,其中包含我处理的每个客户的子目录。我希望能够在计算机上的任何位置键入该客户目录名称,并切换到该目录。换句话说:自动添加别名到.bashrc

/dir/customers/ 
/dir/customers/customer1/ 
/dir/customers/customer2/ 
/dir/customers/customer3/ 

我想customer1表,customer2表,并customer3所有被添加到我的〜/ .bashrc文件,每当我创建一个新的客户,它会更新补充一点为好。

任何接受者?

回答

7

如果您在〜/ .bashrc中添加以下代码:

for i in /dir/customers/* 
do 
    alias $(basename $i)="cd '$i'" 
done 

这将设置别名customer1表,customer2表,customer3(的所有子目录/ DIR /客户/)和每次添加例如:别名customer1是cd/dir/customers/customer1和别名customer2是cd/dir/customers/customer2等等。

+0

谢谢你的快速响应。我不知道为什么我没有想到一个循环。我仍然在学习。非常感谢。 – DrewVS 2011-03-21 00:03:26

+1

@DrewVS:*** NO!***没有必要使用'ls',事实上这是一个坏主意! Globbing会照顾它:'对于我in/dir/customers/*'。而且,'eval'是完全不必要的。 'alias $ i =“cd'/ dir/customers/$ i'”' – 2011-03-21 00:36:19

+0

@Dennis Williamson:我同意你的建议,编辑剧本,非常感谢。 – anubhava 2011-03-21 00:41:31

2

另外值得一提的是:你可以export CDPATH=/dir/customers

然后如果你在任何地方,你输入cd David_Johnson如果这样的目录存在,你将被带到/dir/customers/David_Johnson

这样做的好处是,你可以只添加David_Johnson,并没有需要资源的.bashrc这个工作(我知道这不是一个别名,但似乎提供了一点灵活性)

+0

好点。这是一个更简单的解决方案,运行良好。但是,我看到的缺点是无法选项卡自动完成,因此必须知道目录的确切名称。早期的别名解决方案为您提供了这种能力。 – DrewVS 2011-03-21 17:40:30

+0

@DrewVS:命令完成非常容易定制,但是如果创建N个别名适用于您,则不需要:) – nhed 2011-03-21 18:05:31