Bash alias con un espacio como parte del comando

11

Estoy tratando de crear un alias bash, donde el alias en sí tiene un espacio.

La idea es que el alias (es decir con) significa sudo openvpn --config /path/to/my/openvpn/configs/. Lo que resulta en un comando legible, cuando conse usa el alias.

es decir: `con uk.conf` == `sudo openvpn --config /path/to/my/openvpn/configs/uk.conf`

Yo entiendo que no se puede declarar el alias de la siguiente manera: con ="sudo openvpn --config /path/to/my/openvpn/configs/". ¿Funcionarían las funciones bash en este escenario? Nunca he oído hablar de eso, pero cuando busco una solución para este problema menor.

boolean.is.null
fuente

Respuestas:

12

Sí, necesitará usar una función. Un alias funcionaría si quisiera agregar un parámetro, cualquier argumento dado a los alias se pasa como argumento al programa con alias, pero como parámetros separados , no simplemente agregado a lo que está allí. Para ilustrar:

$ alias foo='echo bar'
$ foo
bar
$ foo baz
bar baz

Como puede ver, lo que se hizo eco fue bar bazy no barbaz. Como desea concatenar el valor que pasa al parámetro existente, necesitará algo como:

function com(){ sudo openvpn --config /path/to/my/openvpn/configs/"$@"; }

Agregue la línea de arriba ~/.bashrcy estará listo para comenzar.

terdon
fuente
44
Puede usar en "$@"lugar de "$1"para que también se pasen los argumentos posteriores. (Comentario general, posiblemente irrelevante para el caso específico aquí)
Toby Speight
@TobySpeight D'oh! Debería haber pensado en eso. Gracias, editado.
terdon
1
@TobySpeight solo para aclarar, ¿eso significa que com uk.conf -something elsese traduciría a sudo openvpn --config /path/to/my/openvpn/configs/uk.conf -something else?
TMH
44
@TomHart sí. $@contiene todos los parámetros dados Consulte ¿Cuál es la diferencia entre $ * y $ @? .
terdon