Alias ​​do bash com um espaço como parte do comando

11

Estou tentando criar um alias do bash, onde o próprio alias tem um espaço nele.

A ideia é que o alias (ie con) represente sudo openvpn --config /path/to/my/openvpn/configs/. O que resulta em um comando legível, quando o conalias é usado.

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

Eu entendo que não pode declarar o alias como este: con ="sudo openvpn --config /path/to/my/openvpn/configs/". As funções do bash funcionariam nesse cenário? Eu nunca ouvi falar disso, mas ao pesquisar uma solução para esse pequeno problema.

boolean.is.null
fonte

Respostas:

12

Sim, você precisará usar uma função. Um alias funcionaria se você quisesse adicionar um parâmetro. Todos os argumentos fornecidos aos alias são passados ​​como argumentos para o programa alias, mas como parâmetros separados , não simplesmente anexados ao que está lá. Ilustrar:

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

Como você pode ver, o que ecoou foi bar baze não barbaz. Como você deseja concatenar o valor que você passa para o parâmetro existente, precisará de algo como:

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

Adicione a linha acima ao seu ~/.bashrce você está pronto para começar.

terdon
fonte
4
Você pode usar em "$@"vez de, "$1"para que os argumentos subsequentes também sejam transmitidos. (Comentário geral, possivelmente irrelevante para o caso específico aqui)
Toby Speight
@TobySpeight D'oh! Eu devia ter pensado nisso. Obrigado, editado.
terdon
1
@TobySpeight apenas para esclarecimentos, isso significa que com uk.conf -something elsese traduziria em sudo openvpn --config /path/to/my/openvpn/configs/uk.conf -something else?
TMH
4
@ TomHart yes. $@contém todos os parâmetros fornecidos. Consulte Qual é a diferença entre $ * e $ @? .
terdon