命令在bash中不作为别名或函数

时间:2014-04-14 20:56:08

标签: bash shell terminal

我有这个命令:

# Open up all git modified files in vertical splits
function vge {
  vim -O `git status --porcelain | sed -ne "s/^ M //p"`
}

我想稍后添加选项和内容,但我甚至无法将作为别名运行。如果我只是复制命令并将其粘贴到我的终端并按下输入即可。我得到的错误是第二个(依此类推)文件是:

-bash: path/to/file.ext: Permission denied

我真的不知道该尝试什么

1 个答案:

答案 0 :(得分:0)

在我看来,就像你成功打开第一个文件,然后尝试执行其余文件。至少,当我看到错误消息时,这是我想到的第一件事。然后它实际上是有道理的,因为你没有对文件执行访问权限。

您可以通过在具有执行权限的无害脚本上进行尝试来验证这一点,并查看它是否已执行。

那就是说,我没有得到这种行为 - 它对我来说很好,就像你写的一样。

为了弄清楚发生了什么,我倾向于尝试将功能分成不同的部分。我也倾向于避免使用反引号进行命令替换。我认为$(命令)语法更清晰,更不容易出错。不过,这只是个人偏好。 :)

所以,我建议从这样的事情开始:

function vge {
    files_to_open=$(git status --porcelain | sed -ne "s/^ M //p")
    echo "Opening files: $files_to_open"
    vim -O $files_to_open
}

检查输出并试图弄清楚为什么只打开一个文件而其余文件被执行(如果确实这个假设是正确的)。