题
我经常想改变到其中特定可执行文件位于的目录。所以我想是这样
cd `which python`
改变到安装python命令的目录。然而,这显然是非法的,因为CD将一个目录,而不是文件。有一些明显的regexp-FOO我可以做到剥离的文件名,但是这会破坏它的点是一个简单的一衬垫。
解决方案
下面:
cd $(dirname `which python`)
编辑:
即使容易(实际测试这个时候):
function cdfoo() { cd $(dirname `which $@`); }
然后 “cdfoo蟒”。
其他提示
要避免所有那些外部程序(“目录名称”和差远了,该无用的,但流行“其”)也许有点改写为:
cdfoo() {
tgtbin=$(type -P "$1")
[[ $? != 0 ]] && {
echo "Error: '$1' not found in PATH" >&2
return 1
}
cd "${tgtbin%/*}"
}
此也从上方固定罕见关键字“功能”,并添加(非常简单)的错误处理。
可能的开始用于更sphisticated溶液。
有关比较:
zsh:~% cd =vi(:h) zsh:/usr/bin%
= CMD扩展到路径到CMD和(:H)是一种改性的glob取头
的zsh是只写的,但功能强大。
这样的事情应该做的伎俩:
cd `dirname $(which python)`
我使用配发的一个特征是PUSHD / POPD。这些维护一个目录栈,这样你就不必尽量保持你在那里的历史,如果你想之前返回到当前工作目录更改目录。
例如:
pushd $(dirname `which $@`)
...
popd
您可以使用这样的:
cd `which <file> | xargs dirname`
我增加了一点的简单的错误处理,使cdfoo的)行为(遵循目录名称为不存在/ nonpath参数的
function cdfoo() { cd $(dirname $(which $1 || ( echo . && echo "Error: '$1' not found" >&2 ) ));}
不隶属于 StackOverflow