Bash alias ze spacją jako część polecenia

11

Próbuję utworzyć alias bash, w którym sam alias ma spację.

Chodzi o to, że alias (tj. con) Oznacza sudo openvpn --config /path/to/my/openvpn/configs/. Które skutkuje czytelnym poleceniem, gdy conużywany jest alias.

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

Rozumiem, że nie mogę zadeklarować alias takiego: con ="sudo openvpn --config /path/to/my/openvpn/configs/". Czy w tym scenariuszu działałyby funkcje bash? Nigdy o tym nie słyszałem, ale szukając rozwiązania tego drobnego problemu.

boolean.is.null
źródło

Odpowiedzi:

12

Tak, musisz użyć funkcji. Alias ​​działałby, gdybyś chciał dodać parametr, wszelkie argumenty podane dla aliasów są przekazywane jako argumenty do programu aliasu, ale jako osobne parametry , a nie tylko dołączane do tego, co tam jest. Ilustrować:

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

Jak widać, echo było bar bazi nie było barbaz. Ponieważ chcesz połączyć wartość przekazywaną z istniejącym parametrem, potrzebujesz czegoś takiego:

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

Dodaj powyższą linię ~/.bashrci możesz zacząć.

terdon
źródło
4
Możesz użyć "$@"zamiast, "$1"aby przekazywane były również kolejne argumenty. (Komentarz ogólny, być może nieistotny dla konkretnego przypadku tutaj)
Toby Speight
@TobySpeight D'oh! Powinienem o tym pomyśleć. Dzięki, zredagowane.
terdon
1
@TobySpeight tylko dla wyjaśnienia, czy to znaczy, że to com uk.conf -something elseby się przełożyło sudo openvpn --config /path/to/my/openvpn/configs/uk.conf -something else?
TMH,
4
@TomHart tak. $@zawiera wszystkie podane parametry. Zobacz Jaka jest różnica między $ * a $ @? .
terdon