Как я могу автоматически цитировать или группировать аргументы командной строки для псевдонима в bash? - PullRequest
3 голосов
/ 14 ноября 2008

У меня есть скрипт, который принимает команду и выполняет ее на удаленном хосте. Работает нормально, например:

$ rexec "ant build_all"

выполнит команду ant build_all на удаленной системе (передав ее через SSH и т. Д.).

Поскольку я ленивый, я хочу настроить псевдоним для этой команды (и, в конечном счете, для нескольких других), такой, чтобы, например, я мог просто вызвать

$ rant build_all

и bash автоматически вызовет

$ rexec "ant build_all"

Я пытался сделать это с псевдонимом, но если я определю

alias rant=rexec ant

тогда любые аргументы, переданные "rant", будут просто добавлены в конец, например, так:

$ rant build_all -Dtarget=Win32
(interpreted as:)
$ rexec "ant" build_all -Dtarget=Win32

Это терпит неудачу, потому что rexec действительно принимает только один аргумент и игнорирует остальные.

Возможно, я мог бы сделать это с помощью скрипта-оболочки bash, но мне было интересно, есть ли в bash какие-либо встроенные модули для этого, возможно, версия псевдонима с именованным аргументом или перловая команда строки цитаты (например qw /// или что-то в этом роде.

Ответы [ 3 ]

3 голосов
/ 14 ноября 2008

Для всех аргументов это будет работать.

function rant () {
    rexec "ant $*"
}

Возможно, вам придется изменить цитату в зависимости от того, какие аргументы вы передаете.

2 голосов
/ 14 ноября 2008

В итоге я воспользовался ответом Кена Г, но лучше: определил рекс как функцию, например так:

function rex {
    run_remote.sh -c "$*"
}

позволил мне затем использовать rexec в псевдонимах, например:

alias rant="rex ant"

и все же сделайте так, чтобы аргументы складывались так, как они мне нужны.

Я забыл, что могу использовать такие функции в bash. Это делает именно то, что мне нужно, без необходимости создания сценария оболочки.

Отличный совет, спасибо!

edit: изменил «rexec» на «rex», потому что я обнаружил, что в моей системе уже была программа под названием «rexec»

0 голосов
/ 14 ноября 2008

Вы можете сделать это как функцию, а не псевдоним:

function rant { rexec "ant $1"; }

Вы можете вызвать его в командной строке как псевдоним

...