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


11

我同时使用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....


2
你不能 命令,别名或文件名不能包含/字符。\ 另一方面,该版本应该可以正常工作。
fkraiem

@fkraiem:似乎反斜杠版本在转义字符方面存在问题。更新了问题。
Thomas Weller

哦,是的。发件人man bash字符/,$,`和=以及上面列出的任何shell元字符或引号字符可能不会出现在别名中。
fkraiem 2014年

该死的。我尝试过man alias,但它不存在。如果您给出答案,我会接受的。
Thomas Weller 2014年

别名是一回事,shell函数是另一回事。再看看
亚历克西斯

Answers:


10

/并且\属于不能在Bash别名中显示的字符。来自man bash

上面列出的字符/,,$` =和任何外壳程序元字符或引号字符可能不会出现在别名中。

作为一种解决方法,您可以切换到Zsh,这允许这两种方式:

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

12

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

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

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

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

shopt -s autocd

然后,您可以在命令行上输入目录名称,然后“执行”该目录将更改为该目录。

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

如果这样做shopt,我可能很快就会在Windows上错过该功能:-)
Thomas Weller 2014年

嗯,那不是真的。bash函数名称中接受斜杠。
亚历克西斯

@alexis啊,对,您可以在bash中使用斜杠。固定,谢谢。
吉尔斯(Gillles)“所以-别再作恶了”

@ThomasW。当然可以。autocd这是我切换到zsh的原因之一,早在bash没有它的时候。使用Windows的唯一不错的方法是无论如何都要安装Cygwin,并附带zsh。
吉尔(Gilles)“所以

5

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

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

自然,cd../..也是一个很好的函数名称。可以在外壳函数名称中使用斜杠。

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

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

2

如果要保留别名,为什么不做:

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上的工作情况。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.