Answers:
最后,我想向您展示如何编写“ cd”命令的自定义替换。
您是否发现自己在切换到目录时总是键入相同的内容?您可能至少每次都在此处列出文件,也许是如此之多,以至于您的手会在每个“ cd”之后自动键入“ ls”。
好吧,通过尝试我能想到的所有方法,事实证明只有一种方法可以正确地实现我们所追求的目标。我们必须创建一个shell函数。
Shell函数是Shell编程的一部分。像在编译的编程语言中一样,函数提供了一种过程模块化性。可以创建一个通用函数,以使用不同的参数执行经常使用的逻辑或计算。在这种情况下,该参数是当前工作目录。
这是一个简单的例子:
function cs () { cd $1 ls }
正如@geirha正确指出的那样,如果您尝试切换到名称中带有空格的目录,则上述功能将失败:
$ cs A\ B/
-bash: cd: A: No such file or directory
<current directory listing>
您应该改为使用以下功能:
function cs () {
cd "$@" && ls
}
将代码添加到中后~/.bashrc
,您应该可以执行以下操作:
hello@world:~$ cs Documents/
example.pdf tunafish.odt
hello@world:~/Documents$
您可以builtin
在bash中使用命令:
function cd() {
new_directory="$*";
if [ $# -eq 0 ]; then
new_directory=${HOME};
fi;
builtin cd "${new_directory}" && ls
}
function ls() { /usr/bin/ls $* }
感谢Florian Diesch使用函数的技巧。我无法使用cs
该名称,因为csound软件包中有一个cs
命令,因此我使用。lc
我将此添加到~/.bash_aliases
(nano ~/.bash_aliases
):
function lc () {
cd $1;
ls
}
终端需要reset
对此生效。
$1
不带引号的喜欢,这将使它失败,如果该目录包含空格。另外,您应该检查cd
; 的返回值。如果失败(例如,权限被拒绝),则没有任何必要运行ls
。lc() { cd "$@" && ls; }
作为对此功能的扩展:cs() { cd "$1" && ls; }
,您可能希望cd
通过使用$@
而不是"$1"
这样来传递函数的所有参数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
}
再后rmv
在该行.bashrc
:
alias cd='cdd'
# Use bash built in completion for cd to allow for filenames to be used
complete -r cd