Bash alias con uno spazio come parte del comando


11

Sto cercando di creare un alias bash, in cui l'alias stesso ha uno spazio al suo interno.

L'idea è che l'alias (cioè con) sta per sudo openvpn --config /path/to/my/openvpn/configs/. Il risultato è un comando leggibile, quando conviene utilizzato l' alias.

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

Capisco che non posso dichiarare l'alias in questo modo: con ="sudo openvpn --config /path/to/my/openvpn/configs/". Le funzioni bash funzionerebbero in questo scenario? Non ne ho mai sentito parlare, ma quando cerco una soluzione per questo piccolo problema.

Risposte:


12

Sì, dovrai usare una funzione. Un alias funzionerebbe se si desidera aggiungere un parametro, tutti gli argomenti forniti agli alias vengono passati come argomenti al programma con alias ma come parametri separati , non semplicemente aggiunti a ciò che c'è. Illustrare:

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

Come puoi vedere, ciò che è stato fatto eco è stato bar baze non barbaz. Dato che vuoi concatenare il valore che passi al parametro esistente, avrai bisogno di qualcosa come:

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

Aggiungi la riga sopra alla tua ~/.bashrce sei pronto per partire.


4
È possibile utilizzare "$@"invece "$1"che in modo da passare anche gli argomenti successivi. (Commento generale, forse irrilevante per il caso specifico qui)
Toby Speight,

@TobySpeight D'oh! Avrei dovuto pensarci. Grazie, a cura.
terdon

1
@TobySpeight solo per chiarimenti, significa che com uk.conf -something elsesi tradurrebbe in sudo openvpn --config /path/to/my/openvpn/configs/uk.conf -something else?
TMH il

4
@ TomHart sì. $@contiene tutti i parametri forniti. Vedi Qual è la differenza tra $ * e $ @? .
Terdon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.