Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动将别名添加到.bashrc_Bash_Alias_Aliases - Fatal编程技术网

自动将别名添加到.bashrc

自动将别名添加到.bashrc,bash,alias,aliases,Bash,Alias,Aliases,我知道可能没有简单的方法可以做到这一点,但我想我可能会把它放在那里。我有一个目录,其中包含我处理的每个客户的子目录。我希望能够在计算机上的任何位置键入客户目录名,然后切换到该目录。换言之: /dir/customers/ /dir/customers/customer1/ /dir/customers/customer2/ /dir/customers/customer3/ 我希望customer1、customer2和customer3都被添加到我的~/.bashrc文件中,每当我创建一个新

我知道可能没有简单的方法可以做到这一点,但我想我可能会把它放在那里。我有一个目录,其中包含我处理的每个客户的子目录。我希望能够在计算机上的任何位置键入客户目录名,然后切换到该目录。换言之:

/dir/customers/
/dir/customers/customer1/
/dir/customers/customer2/
/dir/customers/customer3/
我希望customer1、customer2和customer3都被添加到我的~/.bashrc文件中,每当我创建一个新客户时,它也会更新以添加该客户


有人吗?

如果在~/.bashrc中添加此代码:

for i in /dir/customers/*
do 
   alias $(basename $i)="cd '$i'"
done
它将为customer1、customer2、customer3(所有/dir/customers/子目录)设置别名,每次您添加新客户(例如:customerN)时,它的别名customerN将在您登录时自动添加


例如:别名customer1是cd/dir/customers/customer1,别名customer2是cd/dir/customers/customer2,依此类推……

值得一提的另一种选择:您可以
导出CDPATH=/dir/customers

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


这里的好处是,您可以只添加
David_Johnson
,而不需要为
.bashrc
提供资源,就可以使用它(我知道它不是别名,但似乎提供了一点灵活性)

感谢您的快速响应。我不知道为什么我没有想到一个循环。我想还在学习。非常感谢。@DrewVS:不!没有必要使用
ls
,事实上这是个坏主意!Globbing会处理它:
对于i in/dir/customers/*
。而且,
eval
完全没有必要
alias$i=“cd'/dir/customers/$i'
@Dennis Williamson:我同意你的建议,编辑了脚本,非常感谢。@anubhava:由于单引号和删除了
eval
,你的
alias
命令将不再有效。使用我在上一篇评论中发布的引用,这样变量就可以展开,如果变量中有空格,它就会受到保护。虽然空格会导致
alias
命令出错,但总是引用包含文件名的变量名是一个好习惯。@Dennis Williamson:同意,这是一个非常好的建议。做了改变,谢谢,伙计。说得好。这是一个更简单的解决方案,效果很好。然而,我看到的缺点是,您不能使用tab auto complete,因此必须知道目录的确切名称。早期的别名解决方案为您提供了该功能。@DrewVS:Command completion很容易自定义,但如果创建N个别名对您有效,则无需:)