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

Tho*_*ler 12 bash alias

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

在 Windows 上,我可以做一个

C:\Users\Thomas>cd..\..
C:\>
Run Code Online (Sandbox Code Playgroud)

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

21:17:10 $ cd../..
bash: cd../..: No such file or directory
Run Code Online (Sandbox Code Playgroud)

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

alias cd../..='cd ../..'
alias cd..\..='cd ../..'
Run Code Online (Sandbox Code Playgroud)

当我开始一个新的 bash 时,我得到

21:16:26 $ bash
bash: alias: `cd../..': invalid alias name
Run Code Online (Sandbox Code Playgroud)

我将如何设置了别名cd..\..cd../..正确?

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

21:39:43 $ cd..\..
bash: cd....: command not found
Run Code Online (Sandbox Code Playgroud)

它不起作用,即使我为cd.....

Gil*_*il' 13

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

cd../.. () { cd ../..; }
Run Code Online (Sandbox Code Playgroud)

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

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

shopt -s autocd
Run Code Online (Sandbox Code Playgroud)

然后你可以在命令行中输入一个目录名,“执行”该目录就会变成它。

~/some/sub/directory$ ../..
~/some$ 
Run Code Online (Sandbox Code Playgroud)


fkr*_*iem 11

/并且\属于不能出现在 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
/
Run Code Online (Sandbox Code Playgroud)


ale*_*xis 5

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

function ../.. { cd ../..; echo "$PWD"; }
Run Code Online (Sandbox Code Playgroud)

自然,cd../..也是一个很好的函数名。斜线可以用在 shell 函数名中。

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

function cd.... { cd ../..; } 
Run Code Online (Sandbox Code Playgroud)