Komutun bir parçası olarak boşluklu bas takma adı


11

Takma adın içinde bir boşluk olduğu bir bash takma adı oluşturmaya çalışıyorum.

Fikir, takma adın (yani con) temsil ettiği sudo openvpn --config /path/to/my/openvpn/configs/. Diğer conad kullanıldığında okunabilir bir komutla sonuçlanır .

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

Ben böyle takma ilan edemeyeceğini biliyoruz: con ="sudo openvpn --config /path/to/my/openvpn/configs/". Bu senaryoda bash işlevleri çalışır mı? Bunu hiç duymadım, ama bu küçük sorun için bir çözüm araştırırken.

Yanıtlar:


12

Evet, bir işlev kullanmanız gerekecektir. Bir takma ad, bir parametre eklemek istediğinizde işe yarayacaktır, takma adlara verilen bağımsız değişkenler, takma adı verilen programa bağımsız değişkenler olarak değil , ayrı parametreler olarak iletilir . Örneklemek gerekirse:

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

Gördüğünüz gibi yankılanan şeydi bar baz, değil barbaz. Mevcut parametreye ilettiğiniz değeri birleştirmek istediğiniz için aşağıdaki gibi bir şeye ihtiyacınız olacak:

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

Yukarıdaki satırı kendi adresinize ekleyin, ~/.bashrcartık başlamaya hazırsınız.


4
Bunun "$@"yerine "$1"sonraki argümanların da iletilmesi için kullanabilirsiniz. (Genel yorum, muhtemelen buradaki özel durumla alakasız)
Toby Speight

@TobySpeight D'oh! Bunu düşünmeliydim. Teşekkürler, düzenlendi.
terdon

1
@TobySpeight sadece açıklama için, bu ortalama mu com uk.conf -something elseda uyarlanabilir sudo openvpn --config /path/to/my/openvpn/configs/uk.conf -something else?
TMH

4
@TomHart evet. $@verilen tüm parametreleri içerir. Bkz. $ * Ve $ @ arasındaki fark nedir? .
terdon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.