将'command with a pipe'作为 bash 函数参数传递



我写了一个很小的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 函数吗?

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

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

另请参阅:

  • 我正在尝试将命令放入变量中,但复杂情况总是失败!
  • 我们如何运行存储在变量中的命令?
  • 为什么在 Bash 中应该避免使用 eval,我应该使用什么来代替?

最新更新