Você pode escrever uma função de wrapper no Bash e nomeá-la como scp , que usa getopts para processar as opções em um novo array, deixando a origem e o destino nos parâmetros posicionais e verificando a presença de "@" e ":" e, se ausente, emite uma mensagem de erro. Se eles estiverem presentes, chame o% realscp usando algo como command scp "${args[@]}" "$source" "$dest" . O comando command faz com que o Bash chame o programa encontrado no PATH em vez da função com o mesmo nome.
Como, pelo menos no meu sistema, scp suporta apenas o tipo de opção curta, getopts (que também suporta apenas opções curtas) funcionará bem para isso.
A função seria algo como isto (não testado):
scp () {
# wrapper function to prevent scp of local-only files
options="1246BCpqrvc:F:i:l:o:P:S:
while getopts $options option
do
case $option in
1 | 2 | 4 | 6 | B | C | p | q | r | v)
args+=($option)
;;
c | F | i | l | o | P | S)
args+=($option "$OPTARG")
;;
esac
done
if [[ $1 != *@*:* && $2 != *@*:* ]]
then
echo "Local-only copy not permitted"
echo "to override, use 'command scp ARGS'"
return 1
fi
command scp "${args[@]}" "$1" "$2"
}