我同时使用 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 ../..'
当我开始一个新的 bash 时,我得到
21:16:26 $ bash
bash: alias: `cd../..': invalid alias name
cd..\..
我将如何为和cd../..
正确设置别名?
cd..\..
转义字符似乎有问题:
21:39:43 $ cd..\..
bash: cd....: command not found
它不起作用,即使我为cd....
.
您不能在别名中使用斜杠。但是,Bash 允许在函数名称中使用它们,因此您可以将其设为函数:
您不能在别名或函数名称中使用反斜杠。反斜杠字符引用下一个字符,因此在将该字符串作为命令名称查找之前
cd..\..
被解析为。cd....
如果要调用名为 的命令cd..\..
,则需要键入cd..\\..
、'cd..\..'
或等效内容。此外,别名查找不会考虑以任何方式引用的命令名称,因此您永远不能使用包含反斜杠的别名。Bash 也不允许在函数名中使用反斜杠。由于cd..\..
被解析为cd....
,您可以定义一个名为cd....
(如上)的函数。如果您使用该
cd
命令,则必须在其后键入空格,就像任何其他命令一样。但是你可以通过根本不打字来节省打字cd
时间。autocd
在中使用以下行设置选项~/.bashrc
:然后你可以在命令行上输入一个目录名,“执行”那个目录就会变成它。
/
并且\
是不能出现在 Bash 别名中的字符之一。来自man bash
:作为解决方法,您可以切换到 Zsh,它允许:
“不能在别名或函数名中使用斜杠”?这对我来说是个新闻。多年来,我一直在 Linux 和 OS X bash 上使用以下 shell 函数,从未遇到过任何问题:
当然,
cd../..
也是一个很好的函数名。可以在 shell 函数名中使用斜线。至于反斜杠版本,您不能将它嵌入别名或函数名称中,但您不必这样做:当您键入时
cd..\..
,bash 将反斜杠解释为转义并尝试执行结果cd....
。所以定义它,你就可以做你想做的一切。不客气。如果你想保留别名,为什么不这样做:
或者,如果您需要返回:
不知道这对您在精神上与 Windows 大脑保持同步有多大帮助,但这似乎仍然是一种简单的方法。(至少对于我们这些足够幸运的人来说,不必担心 Windows 上的工作方式。)