我同时使用 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 上完成事情。)