如何为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_aliases
( nano ~/.bash_aliases
):
function lc () { cd $1; ls }
终端需要reset
才能生效。
作为此函数的扩展: cs() { cd "$1" && ls; }
你可能希望通过使用$@
而不是"$1"
将所有函数的参数传递给cd
: cs() { 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 }
然后在.bashrc
的rmv
行之后:
alias cd='cdd' # Use bash built in completion for cd to allow for filenames to be used complete -r cd