GNU/Linux >> Belajar Linux >  >> Linux

Menjalankan Jalur yang Dapat Dieksekusi Dengan Nama Yang Sama Dengan Fungsi yang Ada?

Terkadang saya mendefinisikan fungsi yang membayangi executable dan mengubah argumen atau outputnya. Jadi fungsinya memiliki nama yang sama dengan yang dapat dieksekusi, dan saya perlu cara bagaimana menjalankan yang dapat dieksekusi dari fungsi tersebut tanpa memanggil fungsi secara rekursif. Misalnya, untuk menjalankan output fossil diff . secara otomatis melalui colordiff dan less -R Saya menggunakan:

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]"
}

Jika saya yakin tentang lokasi executable, saya cukup mengetik /usr/bin/fossil . Bash mengenali bahwa / berarti perintah itu dapat dieksekusi, bukan fungsi. Tapi karena saya tidak tahu lokasi pastinya, saya harus memanggil which dan memeriksa hasilnya. Apakah ada cara yang lebih sederhana?

Jawaban yang Diterima:

Gunakan command bawaan cangkang:

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. Cara mengaudit izin dengan perintah find

  2. Menggunakan –exclude Dengan Perintah Du?

  3. Bagaimana Menjalankan Perintah Asli Yang Berasal Dari Nama Yang Sama?

  1. Bagaimana cara menemukan lokasi yang dapat dieksekusi di C?

  2. Bagaimana saya bisa menjalankan perintah yang berbeda tetapi dengan argumen yang sama?

  3. Linux - Menjalankan Perintah Yang Sama di Banyak Mesin Sekaligus

  1. Menjadwalkan tugas dengan perintah cron Linux

  2. Jadwalkan tugas dengan Linux pada perintah

  3. Diurutkan dengan sort di baris perintah