将“带管道命令”作为Bash函数参数传递

6

我编写了一个非常简单的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个回答

4

想要以安全和可靠的方式实现你想要的内容是困难的。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

注意,您不需要额外的引号或转义即可使其工作。
另请参阅:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接