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.