我经常想改变到其中特定可执行文件位于的目录。所以我想是这样

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 ) ));}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top