我可以使用 cd../.. 作为别名吗?

我可以使用 cd../.. 作为别名吗?

我同时使用 Windows 和 Ubuntu,并在它们上面进行控制台操作。

在 Windows 上我可以这样做

C:\Users\Thomas>cd..\..
C:\>

然而,在 Linux 上,这不起作用,无论是使用反斜杠还是正斜杠。

21:17:10 $ cd../..
bash: cd../..: No such file or directory

由于我经常犯这个错误,因此我尝试.bash_aliases为这种情况定义一个别名:

alias cd../..='cd ../..'
alias cd..\..='cd ../..'

当我开始新的聚会时,我得到

21:16:26 $ bash
bash: alias: `cd../..': invalid alias name

我该如何正确设置cd..\..和的别名cd../..

cd..\..转义字符似乎有问题:

21:39:43 $ cd..\..
bash: cd....: command not found

即使我为 定义了另一个别名,它也不起作用cd....

答案1

您不能在别名中使用斜杠。但是,Bash 允许在函数名称中使用斜杠,因此您可以将其设为函数:

cd../.. () { cd ../..; }

您不能在别名或函数名中使用反斜杠。反斜杠字符引用下一个字符,因此在将该字符串作为命令名查找之前,它cd..\..会被解析为。如果要调用名为的命令,则需要输入、或等效内容。此外,以任何方式引用的命令名都不会被考虑用于别名查找,因此您永远不能使用包含反斜杠的别名。Bash 也不允许在函数名中使用反斜杠。由于它会被解析为,因此您可以定义一个名为(如上所述)的函数。cd....cd..\..cd..\\..'cd..\..'cd..\..cd....cd....

如果您使用该cd命令,则必须在其后键入空格,就像任何其他命令一样。但是您可以通过完全不输入来节省输入cd。使用autocd以下行设置选项~/.bashrc

shopt -s autocd

然后您可以在命令行中键入目录名称,“执行”该目录将会改变到该目录。

~/some/sub/directory$ ../..
~/some$ 

答案2

/\是不能出现在 Bash 别名中的字符。来自man bash

字符/$、 ` 和=以及上面列出的任何 shell 元字符或引号字符不得出现在别名中。

作为一种解决方法,您可以切换到 Zsh,它允许同时执行以下操作:

% grep 'alias.*cd' .zshrc 
alias cd../..='cd ../..'
alias cd..\\..='cd ../..'
% pwd
/Users/firas
% cd../..
% pwd
/ 
% cd
% pwd
/Users/firas
% cd..\..
% pwd
/

答案3

“您不能在别名中使用斜线或函数name”?这对我来说是个新鲜事。多年来,我一直在 Linux 和 OS X bash 上使用以下 shell 函数,从未遇到任何问题:

function ../.. { cd ../..; echo "$PWD"; }

当然,cd../..也是一个不错的函数名。斜线在 shell 函数名中使用。

至于反斜杠版本,您不能将其嵌入别名或函数名中,但您不必这样做:当您键入时cd..\..,bash 会将反斜杠解释为转义并尝试执行结果cd....。因此定义它,您就可以做您想要的一切。不客气。

function cd.... { cd ../..; } 

答案4

如果您想保留别名,为什么不这样做:

alias   ..='cd ..'
alias  ...='cd ../../' 
alias ....='cd ../../../'

或者,如果你需要去方式后退:

alias   .3='cd ../../../' 
alias   .4='cd ../../../../'
alias   .5='cd ../../../../../'
# how far back do you need to go on a normal basis..?

不知道这能多大程度上帮助你在精神上与你的 Windows 大脑保持同步,但这似乎仍然是一个简单的方法。(至少对于我们这些幸运的人来说,我们不需要担心如何在 Windows 上完成事情。)

相关内容