假设我的中有这个别名.bashrc
alias somedir="cd /var/www/site"
我该如何使用somedir
...命令cd
?
例如
cd somedir/app/
目前执行此操作会返回:
-bash: cd: somedir/app: 没有这样的文件或目录
是否可以通过这种方式使用别名?
答案1
shellbash
有一个CDPATH
shell 变量,可以帮助您在没有别名的情况下完成此操作:
$ CDPATH=".:/var/www/site"
$ cd app
/var/www/site/app
如果有一个app
名为的子目录doc
:
$ cd app/doc
/var/www/site/app/doc
如果值为CDPATH
,.:/var/www/site
该cd
命令将首先在当前目录中查找命令行上给出的目录路径,如果没有找到,它将在 下查找/var/www/site
。
从bash
手册:
CDPATH
命令的搜索路径
cd
。这是一个以冒号分隔的目录列表,shell 在其中查找命令指定的目标目录cd
。样本值为".:~:/usr"
.
请注意,CDPATH
不应导出,因为您通常不希望此变量影响bash
从交互式会话运行的脚本。
答案2
引用一个方便的 Bash 参考(强调我的):
Bash 别名本质上只不过是一个键盘快捷键、一种缩写、一种避免键入长命令序列的方法。 ...如果别名可以承担 C 预处理器的某些功能(例如宏扩展),那就太好了,但不幸的是 Bash 不会扩展别名体内的参数。此外,脚本无法在“复合结构”(例如 if/then 语句、循环和函数)中扩展别名本身。另一个限制是别名不会递归扩展。几乎总是,无论我们希望别名做什么,都可以通过函数更有效地完成。
尽管您的情况特殊CDPATH
,正如拘萨罗南达所回答的,等效函数可能如下所示:
somedir() {
cd /var/www/site/"${1:-}"
}
现在你已经有了:
$ pwd
/tmp
$ somedir
$ pwd
/var/www/site
$ somedir app
$ pwd
/var/www/site/app