Передача «команды с каналом» в качестве параметра функции bash - PullRequest
0 голосов
/ 22 октября 2018

Я написал крошечную функцию bash, которая просто запускает команду, если $current_user_input = yes

function if_yes_run_with {
    if [ $current_user_input = yes ]
    then
        $1
    fi
}

Я называю ее несколько раз идеально, например:

if_yes_run_with 'brew update'

Я достиг точки, в которой я хотел бы передать ему команду, которая включает в себя канал:

if_yes_run_with '\curl -L https://get.rvm.io | bash -s stable'

функция появляется только для оценки команды до канала.Поэтому результат его выполнения дает тот же результат, что и:

if_yes_run_with \curl -L https://get.rvm.io

Может ли кто-нибудь помочь с передачей «команды с каналом» в качестве параметра функции bash?

1 Ответ

0 голосов
/ 22 октября 2018

Трудно и безопасно делать то, что вы хотите. Greg's Bash Wiki говорит, что лучше:

Переменные содержат данные.Функции содержат код.Не помещайте код в переменные!

Я бы не стал выполнять команду напрямую.Вместо этого сделайте так, чтобы функция возвращала успех / неудачу.Затем вы можете делать что угодно в конце вызова с помощью && или if.

is_user_input_enabled() {
    [[ $current_user_input = yes ]]
}

is_user_input_enabled && brew update
is_user_input_enabled && curl -L https://get.rvm.io | bash -s stable

Обратите внимание, что вам не нужны лишние кавычки или экранирование для этой работы.

См. Также:

...