使用别名并继续使用

使用别名并继续使用

假设我的中有这个别名.bashrc

alias somedir="cd /var/www/site"

我该如何使用somedir...命令cd

例如

cd somedir/app/

目前执行此操作会返回:

-bash: cd: somedir/app: 没有这样的文件或目录

是否可以通过这种方式使用别名?

答案1

shellbash有一个CDPATHshell 变量,可以帮助您在没有别名的情况下完成此操作:

 $ CDPATH=".:/var/www/site"
 $ cd app
 /var/www/site/app

如果有一个app名为的子目录doc

 $ cd app/doc
 /var/www/site/app/doc

如果值为CDPATH.:/var/www/sitecd命令将首先在当前目录中查找命令行上给出的目录路径,如果没有找到,它将在 下查找/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

答案3

别名不能这样工作,但您可以使用变量来代替:

somedir="/var/www/site"
cd "$somedir/app"

凭借应有的信用狐狸滚装机在评论中提出这个建议


如果你想节省一些击键次数,你可以设置一个别名:

alias somedir='cd "$somedir"'

或者,如果您启用autocd,您可以cd通过像命令一样给出变量:

~$ shopt -s autocd
~$ "$somedir"
/var/www/site$ 

相关内容