如何使用bashrc函数更改为文件目标目录?

时间:2010-11-22 16:00:27

标签: linux shell bash

我在bashrc中使用这个小函数来快速查看我使用的任何自定义实用程序的源代码:

function wvi()
{
    vi `which $1`;
}

例如,fvi mysort将打开我的实用程序mysort的来源。

我还可以在这里使用另一件事 - 自动切换到中存在实用程序的目录。

例如,

~ $ which mysort
/usr/bin/mysort
~ $

然后fvi mysort应该cd /usr/bin,然后使用vi打开。

如何将此逻辑放入.basrhc?是否有一些直接的实用程序,或者我是否需要首先获取路径然后切断最后一个节点?

5 个答案:

答案 0 :(得分:2)

dirname `which mysort`

答案 1 :(得分:1)

无需外部工具:

fvi () {
    cd "${1%/*}"
    vi "${1##*/}"
}

答案 2 :(得分:1)

我会这样做

wvi () {(
    p=$(which "$1")
    cd "${p%/*}"
    ${EDITOR:-vi} "${p##/*/}"
)}

$ EDITOR而不是文字vi以防万一用户可能更喜欢emacs( - :

答案 3 :(得分:0)

wvi() {
    local file="$(which "$1")"
    cd $(dirname "$file")
    vi $(basename "$file")
    cd -  # return to the previous dir
}

使用function

定义功能时,不需要()关键字

您可以编写您的功能以在子shell中操作,这样您就不必在之后进行整理:

wvi() (
    file="$(which "$1")"
    cd $(dirname "$file")
    vi $(basename "$file")
)

答案 4 :(得分:0)

cd $(dirname `which $1`)

在大多数情况下都可以使用,但你可能想通过附上类似

的内容来考虑符号链接
cd $(dirname $(readlink `which $1`))

如果是if语句(测试内置的-h选项查找符号链接)

if [ -h `which $1 ]; then
  ...

您可能希望这样做的原因是,打开符号链接时vim的行为有时会发生变化,具体取决于您打算对正在打开的文件执行的操作。