Stefano Lattarini wrote: > Just a few obsevations on side issues... > > Bob Proulx writes: >> Rodolfo Borges wrote: >> >> > cat <<EOF >> ~/.bashrc >> > function mv() { >> > local target="${!#}" >> > local dir >> > if [[ "$target" =~ '/$' ]]; then >> > dir="$target" >> > else >> > dir="$(dirname "$target")" >> > fi >> > test -d "$dir" || mkdir -vp "$dir" >> > $(which mv) "$@" >> > } >> > EOF >> >> Very good! I see that you have a solution to your problem. >> >> As a side comment I don't see the point of: >> > $(which mv) "$@" > I think that's needed because otherwise the shell function would end > up calling itself recursively, since it's named `mv' too. > >> The 'which' command is another one of those simple but not very >> portable commands that does different things on different systems. > Since Rodolfo is assuming bash as his shell, he could have used: > $(type -P mv) "$@" > instead, which is more "portable" because it just uses bash builtins. > >> In the simple case of reporting where the command is found on PATH >> the use here is redundant since the command would otherwise simply >> be found on PATH. >> mv "$@" > No, this would call the `mv' function, since shell functions take > precedence over external commands in bash.
Using env is the most portable, at the expense of a fork (compared to bash's "command"): env mv "$@"