【问题标题】:Passing a 'command with a pipe' as a bash function parameter将“带有管道的命令”作为 bash 函数参数传递
【发布时间】:2019-03-26 15:38:11
【问题描述】:

我写了一个小小的 bash 函数,它只运行一个命令 if $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 函数吗?

【问题讨论】:

    标签: bash unix pipe parameter-passing


    【解决方案1】:

    很难以安全可靠的方式做你想做的事。 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
    

    请注意,您不需要任何额外的引号或转义即可完成这项工作。

    另见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 2012-03-27
      • 2016-05-31
      • 2012-10-03
      • 1970-01-01
      • 2021-11-25
      相关资源
      最近更新 更多