treyBake Asked: 2018-10-23 00:26:25 +0800 CST2018-10-23 00:26:25 +0800 CST 2018-10-23 00:26:25 +0800 CST 使用别名并继续 772 假设我有这个别名.bashrc alias somedir="cd /var/www/site" 我如何somedir在说...cd命令中使用? 例如 cd somedir/app/ 这样做目前返回: -bash: cd: somedir/app: 没有这样的文件或目录 甚至可以以这种方式使用别名吗? alias bashrc 3 个回答 Voted Best Answer Kusalananda 2018-10-23T02:18:30+08:002018-10-23T02:18:30+08:00 bashshell 有一个CDPATHshell 变量,可以帮助您在没有别名的情况下执行此操作: $ 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您从交互式会话运行的脚本。 bishop 2018-10-23T10:00:28+08:002018-10-23T10:00:28+08:00 引用一个方便的 Bash 参考资料(强调我的): Bash 别名本质上只不过是一个键盘快捷键,一个缩写,一种避免输入长命令序列的方法。...如果别名可以承担 C 预处理器的某些功能(例如宏扩展),那就太好了,但不幸的是,Bash 不会在别名主体内扩展参数。此外,脚本无法在“复合结构”中扩展别名本身,例如 if/then 语句、循环和函数。另一个限制是别名不会递归扩展。几乎总是,我们想让别名做的任何事情都可以通过函数更有效地完成。 正如 Kusalananda 回答的那样,尽管您的特殊情况是CDPATH,但等效函数可能如下所示: somedir() { cd /var/www/site/"${1:-}" } 现在你有: $ pwd /tmp $ somedir $ pwd /var/www/site $ somedir app $ pwd /var/www/site/app wjandrea 2018-10-23T05:47:37+08:002018-10-23T05:47:37+08:00 别名不是这样工作的,但你可以使用一个变量来代替: somedir="/var/www/site" cd "$somedir/app" 感谢Fox和RoVo在评论中提出的建议 如果你想节省一些击键,你可以设置一个别名: alias somedir='cd "$somedir"' 或者如果你启用autocd,你可以cd通过像命令一样给出变量: ~$ shopt -s autocd ~$ "$somedir" /var/www/site$
bash
shell 有一个CDPATH
shell 变量,可以帮助您在没有别名的情况下执行此操作:如果有
app
被调用的子目录doc
:如果
CDPATH
值为.:/var/www/site
,该cd
命令将首先在当前目录中查找命令行中给出的目录路径,如果没有找到,它将在/var/www/site
.从
bash
手册:请注意,
CDPATH
不应导出它,因为您通常不希望此变量影响bash
您从交互式会话运行的脚本。引用一个方便的 Bash 参考资料(强调我的):
正如 Kusalananda 回答的那样,尽管您的特殊情况是
CDPATH
,但等效函数可能如下所示:现在你有:
别名不是这样工作的,但你可以使用一个变量来代替:
感谢Fox和RoVo在评论中提出的建议
如果你想节省一些击键,你可以设置一个别名:
或者如果你启用
autocd
,你可以cd
通过像命令一样给出变量: