# 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
来自Bash Tips and Tricks: 'cd' with style:
正如@geirha正确指出的那样,如果您尝试切换到名称中带有空格的目录,上述功能将失败:
您应该改用以下函数:
一旦你将该代码添加到你的
~/.bashrc
,你应该能够做到这一点:您可以
builtin
在 bash 中使用该命令:使用函数而不是别名:
感谢Florian Disch提供了使用函数的技巧。因为csound包里
cs
有cs
命令,所以不能用作名字,所以我用.lc
我将此添加到
~/.bash_aliases
(nano ~/.bash_aliases
):终端需要
reset
为此生效。作为此函数的扩展:
cs() { cd "$1" && ls; }
,您可能希望cd
通过使用$@
而不是"$1"
这样传递函数的所有参数:cs() { cd $@ && ls; }
。我在重新定义时遇到了问题
cd
,因为rvm
我的cd
定义也发生了变化。请参阅https://stackoverflow.com/a/19941991/1601989。我真的不想使用builtin
,因为那会跳过rvm
正在做的事情。我将以下内容添加到我的
.bashrc
:然后在以下
rmv
行之后.bashrc
: