Псевдонім Bash з пробілом у складі команди


11

Я намагаюся створити псевдонім bash, де сам псевдонім має пробіл.

Ідея полягає в тому, що псевдонім (тобто con) означає sudo openvpn --config /path/to/my/openvpn/configs/. Це призводить до читабельної команди, коли використовується conпсевдонім.

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

Я розумію , що я не можу оголосити псевдонім , як це: con ="sudo openvpn --config /path/to/my/openvpn/configs/". Чи будуть функціонувати bash функції в цьому сценарії? Я ніколи про це не чув, але, коли вивчав рішення цього незначного питання.

Відповіді:


12

Так, вам потрібно буде використовувати функцію. Псевдонім буде працювати, якщо ви хочете додати параметр, будь-які аргументи, надані псевдонімам, передаються як аргументи до псевдонімованої програми, але як окремі параметри , а не просто додаються до того, що там є. Проілюструвати:

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

Як бачимо, те, що відлунило, було bar bazі ні barbaz. Оскільки ви хочете об'єднати значення, яке ви передаєте в існуючий параметр, вам знадобиться щось на зразок:

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

Додайте рядок вище до свого ~/.bashrcі ви готові йти.


4
Ви можете використовувати "$@"замість того, "$1"щоб і наступні аргументи були передані також. (Загальний коментар, можливо, не має значення для конкретного випадку тут)
Toby Speight

@TobySpeight D'oh! Я мав би подумати про це. Спасибі, відредаговано.
terdon

1
@TobySpeight лише для уточнення, чи означає com uk.conf -something elseце, що перекладається sudo openvpn --config /path/to/my/openvpn/configs/uk.conf -something else?
TMH

4
@TomHart так. $@містить усі задані параметри. Див. Яка різниця між $ * та $ @? .
terdon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.