相关疑难解决方法(0)

在 PATH 中运行与现有函数同名的可执行文件

有时我会定义一个函数来隐藏可执行文件并调整其参数或输出。因此该函数与可执行文件具有相同的名称,我需要一种如何从该函数运行可执行文件而不递归调用该函数的方法。例如,要自动运行的输出fossil diff通过colordiffless -R使用:

function fossil () {
    local EX=$(which fossil)
    if [ -z "$EX" ] ; then
        echo "Unable to find 'fossil' executable." >&2
        return 1
    fi
    if [ -t 1 ] && [ "$1" == "diff" ] ; then
        "$EX" "$@" | colordiff | less -R
        return
    fi
    "$EX" "$@"
}
Run Code Online (Sandbox Code Playgroud)

如果我确定可执行文件的位置,我可以简单地输入/usr/bin/fossil. Bash 认识到这/意味着它是一个可执行文件,而不是一个函数。但由于我不知道确切的位置,我不得不求助于调用which并检查结果。有没有更简单的方法?

bash path function

17
推荐指数
1
解决办法
3042
查看次数

如何在 zsh 中创建一个调用同名现有命令的函数?

如何编写一个函数zsh来调用与函数本身同名的现有命令?例如,我试过这个来说明我的问题:

function ls 
{
    ls -l $1 $2 $3
}
Run Code Online (Sandbox Code Playgroud)

当我执行它时,ls *我得到以下信息:

ls:1: maximum nested function level reached
Run Code Online (Sandbox Code Playgroud)

我认为这是因为该函数被递归调用。我怎样才能避免这种情况?

这是一个粗略的示例,在这种情况下,别名可以完成这项工作,但我有一个更复杂的示例,其中别名不合适,因此我需要编写一个函数。

zsh function

11
推荐指数
1
解决办法
4142
查看次数

标签 统计

function ×2

bash ×1

path ×1

zsh ×1