我同时使用 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)
“您不能在别名或函数名中使用斜杠”?这对我来说是个新闻。我多年来一直在 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)