Псевдоним 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 работать в этом сценарии? Я никогда не слышал об этом, но при поиске решения этой небольшой проблемы.

boolean.is.null
источник

Ответы:

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"так, чтобы последующие аргументы также передавались. (Общий комментарий, возможно, не относящийся к конкретному случаю здесь)
Тоби Спейт
@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