GNU/Linux >> Znalost Linux >  >> Linux

Spuštění spustitelného souboru v cestě se stejným názvem jako existující funkce?

Někdy definuji funkci, která stíní spustitelný soubor a vyladí jeho argumenty nebo výstup. Funkce má tedy stejný název jako spustitelný soubor a potřebuji způsob, jak spustit spustitelný soubor z funkce bez rekurzivního volání funkce. Například pro automatické spuštění výstupu fossil diff přes colordiff a less -R Používám:

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" "[email protected]" | colordiff | less -R
        return
    fi
    "$EX" "[email protected]"
}

Pokud bych si byl jistý umístěním spustitelného souboru, mohl bych jednoduše napsat /usr/bin/fossil . Bash rozpozná, že / znamená, že příkaz je spustitelný soubor, nikoli funkce. Ale protože neznám přesné umístění, musím se uchýlit k volání which a kontrola výsledku. Existuje jednodušší způsob?

Přijatá odpověď:

Použijte command vestavěný shell:

bash-4.2$ function date() { echo 'at the end of days...'; }

bash-4.2$ date
at the end of days...

bash-4.2$ command date
Mon Jan 21 16:24:33 EET 2013

bash-4.2$ help command
command: command [-pVv] command [arg ...]
    Execute a simple command or display information about commands.

    Runs COMMAND with ARGS suppressing  shell function lookup, or display
    information about the specified COMMANDs.  Can be used to invoke commands
    on disk when a function with the same name exists.

Linux
  1. Seřadit pomocí řazení na příkazovém řádku

  2. Manipulace s textem na příkazovém řádku pomocí sed

  3. Jak auditovat oprávnění pomocí příkazu find

  1. Jak spustit původní příkaz s aliasem se stejným názvem?

  2. Rsync kopíruje aktuální adresář s názvem

  3. Linux – Spuštění stejného příkazu na mnoha strojích najednou

  1. Plánování úloh pomocí linuxového příkazu cron

  2. Naplánujte si úlohu pomocí příkazu Linux at

  3. Multi-tasking na příkazovém řádku s screenie