ssh -Q key
Если у вас нет древней версии OpenSSH, и в этом случае ухххх, погрузитесь в исходный код или запустите ssh -v -v -v ...
и посмотрите, появится ли там то, что вы хотите.
Nunca se recomienda poner un comando complejo en una variable. Ver BashFAQ/050 -Estoy tratando de poner un comando en una variable, ¡pero los casos complejos siempre fallan!
Su requisito se vuelve realmente simple, si simplemente decide usar una función en lugar de una variable y pasarle argumentos.
Algo así como
rsync_custom() {
[ "$#" -eq 0 ] && { printf 'no arguments supplied' >&2; exit 1 ; }
rsync -avz --{partial,stats,delete,exclude=".*"} "$@"
}
y ahora pásele los argumentos requeridos como
rsync_custom /dir1 /dir2
La definición de la función es bastante simple en cierto modo, primero verificamos el recuento de argumentos de entrada usando la variable $#
que no debería ser cero. Lanzamos un mensaje de error que dice que no se proporcionan argumentos. Si hay argumentos válidos, "$@"
representa los argumentos reales proporcionados a la función.
Si esta es una función que usaría con bastante frecuencia, es decir, también en la línea de scripts/comandos -, agréguela a los archivos de inicio de shell -, .bashrc
, .bash_profile
por ejemplo.
O, como se indicó, puede valer la pena expandir la expansión de llaves para separar argumentos para una mejor legibilidad como
rsync_custom() {
[ "$#" -eq 0 ] && { printf 'no arguments supplied' >&2; exit 1 ; }
rsync -avz --partial --stats --delete --exclude=".*" "$@"
}
Al menos puede guardar las opciones parcialmente en una variable:
opts=$(echo --{ignore-case,word-regexp,count,exclude="sys*.*"})
Las pruebas son importantes porque el enmascaramiento puede ser difícil:
echo $opts
--ignore-case --word-regexp --count --exclude="sys*.*"
grep $opts bytes *.log
Dado que hay múltiples alternativas, como usar el historial, usar un alias, usar una función, no hay ningún caso de uso obvio -que se me ocurra.Rara vez hay una opción compleja para compartir entre diferentes programas, por lo que para una solución ad -hoc para el shell interactivo, el alias parece una mejor manera:
alias cgrep='grep --ignore-case --word-regexp --count --exclude="sys*"'
cgrep bytes *.log
Su muestra
VAR=rsync -avz --{partial,stats,delete,exclude=".*"}
no puede funcionar, porque la asignación finaliza en el primer espacio en blanco. Tienes que enmascarar los espacios en blanco:
VAR='rsync -avz --{partial,stats,delete,exclude=".*"}'
una cosa bastante peligrosa para la prueba, con esa --opción de eliminación, ¿no? Dado que las opciones pueden contener nuevamente "," y comillas simples, el enmascaramiento puede volverse difícil muy pronto. Buscaría un alias o confiaría en el historial.
Se puede almacenar un alias en el archivo ~/.bashrc para uso continuo en múltiples sesiones. Las funciones también se pueden almacenar en el bashrc, pero solo las necesita, si desea manejar parámetros, pasados a la función para ser evaluados allí.