Como comentei, não acho que haja uma maneira fácil de fazer isso de forma transparente para qualquer comando.
Você pode criar um script de wrapper e chamá-lo, digamos, f
, para fazer
f() {
local command=$1; shift
local files=() arg file
for arg in "$@"; do
file=$(some method to look up the current file in $CDPATH)
files+=("$file")
done
"$command" "${files[@]}"
}
f vim foo.c bar.h
Claro, isso não tem conhecimento de opções ou argumentos que não sejam de nome de arquivo (isto é, isso não permite fazer grep -i pattern foo.c
) e você terá que pensar sobre o que fazer se o argumento não puder ser encontrado em um diretório CDPATH .