如何为cd和ls创建别名?

我经常在运行cd命令后运行ls命令。 如何为此操作创建别名(如cs )?

从Bash提示和技巧:’cd’风格 :

最后,我想向您展示如何为’cd’命令编写自己的自定义替换。

您是否发现自己在更改目录时始终键入相同的内容? 你可能至少每次都会列出那里的文件,也许是你的手在每个’cd’之后自动键入’ls’。

好吧,通过尝试我能想到的各种方式,事实certificate只有一种方法可以正确地实现我们正在寻求的目标。 我们必须创建一个shell函数。

Shell函数是shell编程的一部分。 与编译的编程语言一样,函数提供了一种程序可模块化。 可以创建通用函数来执行经常使用的逻辑或具有不同参数的计算。 在这种情况下,参数是当前工作目录。

这是一个简单的:

 function cs () { cd $1 ls } 

正如@geirha正确指出的那样,如果您尝试切换到名称中包含空格的目录,则上述function将失败:

 $ cs A\ B/ -bash: cd: A: No such file or directory  

您应该使用以下函数:

 function cs () { cd "$@" && ls } 

将代码添加到~/.bashrc ,您应该可以这样做:

 hello@world:~$ cs Documents/ example.pdf tunafish.odt hello@world:~/Documents$ 

您可以在bash中使用builtin命令:

 function cd() { new_directory="$*"; if [ $# -eq 0 ]; then new_directory=${HOME}; fi; builtin cd "${new_directory}" && ls } 

使用函数而不是别名:

 cs() { cd "$1" && ls; } 

感谢Florian Diesch使用函数的提示。 我不能使用cs作为名称,因为csound包中有一个cs命令,所以我使用了lc

我把它添加到~/.bash_aliasesnano ~/.bash_aliases ):

 function lc () { cd $1; ls } 

终端需要reset才能生效。

作为此函数的扩展: cs() { cd "$1" && ls; } 你可能希望通过使用$@而不是"$1"将所有函数的参数传递给cdcs() { cd $@ && ls; } cs() { cd $@ && ls; }

我在重新定义cd遇到了问题,因为rvm改变了我的cd定义。 请参阅https://stackoverflow.com/a/19941991/1601989 。 我真的不想使用builtin因为这会跳过rvm正在做的事情。

我在.bashrc添加了以下内容:

 # cdd allows you to cd to the directory of the given file or directory function cdd() { if [[ $# -eq 0 ]]; then cd elif [[ -d "$*" ]]; then cd "$*" elif [[ -f "$*" ]]; then echo "WARNING: file given, cd to file's dirname" 1>&2 local dir=$(dirname "$*") cd "$dir" else cd "$*" fi } function cs() { cdd $* && ls } 

然后在.bashrcrmv行之后:

 alias cd='cdd' # Use bash built in completion for cd to allow for filenames to be used complete -r cd